我必须循环吗?有没有更快的方法来建立虚拟变量?

尼尔斯·格兰德流浪汉

我有一些看起来像的植物数据(但我最多有7个属性):

     Unnamed: 0     plant          att_1           att_2 ...
0            0     plant_a         sunlover        tall
1            1     plant_b         waterlover      sunlover
2            2     plant_c         fast growing    sunlover

我试图像这样使用pandas get_dummies:

df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],'C': [1, 2, 3]})

pd.get_dummies(df, prefix=['col1', 'col2']):

 C  col1_a  col1_b  col2_a  col2_b  col2_c
 0  1       1       0       0       1       0
 1  2       0       1       1       0       0
 2  3       1       0       0       0       1

但是,sunlover应该在att_1或att_2中编码为1。然后,我将得到大约30个虚拟变量,而不是7 * 30 = 210个变量。我试图遍历整个集合并为每个假人添加值:

for count, plants in enumerate(data_plants.iterrows()):
  print("First", count, plants)
  for attribute in plants:
        print("Second", count, attribute)

该代码只是打印,因为我看到了浪费时间的问题。那样的工作,但是它不够快,无法用于100k和更多行。我考虑过使用.value_counts()来获取属性,然后访问数据帧虚拟变量以将其更新为1,但随后我将覆盖该属性。此刻,我有点迷茫,失去了主意。也许我不得不使用其他软件包?

目标将是这样的:

     Unnamed: 0     plant          att_1           att_2       sunlover      waterlover     tall  ...
0            0     plant_a         sunlover        tall        1             0              1
1            1     plant_b         waterlover      sunlover    1             1              0
2            2     plant_c         fast growing    sunlover    1             0              0
耶斯列尔

使用get_dummiesmax

c = ['att_1', 'att_2']
df1 = df.join(pd.get_dummies(df[c], prefix='', prefix_sep='').max(axis=1, level=0))
print (df1)
     plant         att_1     att_2  fast growing  sunlover  waterlover  tall
0  plant_a      sunlover      tall             0         1           0     1
1  plant_b    waterlover  sunlover             0         1           1     0
2  plant_c  fast growing  sunlover             1         1           0     0

3k实际数据中行的性能应该有所不同:

df = pd.concat([df] * 1000, ignore_index=True)


In [339]: %%timeit
     ...: 
     ...: c = ['att_1', 'att_2']
     ...: df1 = df.join(pd.get_dummies(df[c], prefix='', prefix_sep='').max(axis=1, level=0))
     ...: 
     ...: 
10.7 ms ± 1.11 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [340]: %%timeit
     ...: attCols = df[['att_1', 'att_2']]
     ...: colVals = pd.Index(np.sort(attCols.stack().unique()))
     ...: def myDummies(row):
     ...:     return pd.Series(colVals.isin(row).astype(int), index=colVals)
     ...: 
     ...: df1 = df.join(attCols.apply(myDummies, axis=1))
     ...: 
     ...: 
1.03 s ± 22 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

另一个解决方案:

In [133]: %%timeit
     ...: c = ['att_1', 'att_2']
     ...: df1 = (df.join(pd.DataFrame([dict.fromkeys(x, 1) for x in df[c].to_numpy()])
     ...:                  .fillna(0)
     ...:                  .astype(np.int8)))
     ...:                  
13.1 ms ± 723 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有更快的方法来建立多个子目录?

来自分类Dev

有没有更快的方法来计数XmlNodeList

来自分类Dev

有没有更快的方法来实现此循环功能?

来自分类Dev

有没有一种更快的方法来进行熊猫循环?

来自分类Dev

有没有更快的方法来 grep 模式或提高 while 循环的速度?

来自分类Dev

有没有比 for 循环更快的方法来更改 Pandas 组

来自分类Dev

有没有更快的方法来添加我的多对多DBIC关系?

来自分类Dev

有没有更快的方法来解决我的牛顿算法?

来自分类Dev

有没有通用的方法来打印变量?

来自分类Dev

有没有更快的方法来创建一个空数组的元素数组而不使用for循环

来自分类Dev

有没有更快速的方法来进行这种平均价格循环?

来自分类Dev

有没有更快,更有效的方法来保存python字典?

来自分类Dev

有没有更快的方法来对SortedList进行正则表达式?

来自分类Dev

有没有比cURL更快/更好的方法来检查URL是否可访问?

来自分类Dev

有没有更快的方法来检测游戏功能?

来自分类Dev

有没有更快的方法来获得相同的结果?

来自分类Dev

有没有一种更快的方法来检查数字是否在间隔内?

来自分类Dev

有没有一种更快的方法来在atom中执行拼写检查?

来自分类Dev

有没有更快的方法来达到相同的结果?

来自分类Dev

有没有更快的方法来检查列表中的列表是否等效?

来自分类Dev

有没有更快的方法来运行SQL Where Case

来自分类Dev

有没有更快的方法来解析此文本文件?

来自分类Dev

有没有更快的方法来实现这种“排名”算法?

来自分类Dev

有没有更快的方法来搜索一个numpy数组

来自分类Dev

有没有更快的方法来执行此MongoDB查询?

来自分类Dev

有没有更快的方法来在Linux中获取此输出文件

来自分类Dev

有没有一种更快的方法来检查文件是否正在使用?

来自分类Dev

有没有更快的方法来验证驱动器已被完全清零?

来自分类Dev

有没有更快的方法来计算每小时挑选的 pcs 的总和

Related 相关文章

  1. 1

    有没有更快的方法来建立多个子目录?

  2. 2

    有没有更快的方法来计数XmlNodeList

  3. 3

    有没有更快的方法来实现此循环功能?

  4. 4

    有没有一种更快的方法来进行熊猫循环?

  5. 5

    有没有更快的方法来 grep 模式或提高 while 循环的速度?

  6. 6

    有没有比 for 循环更快的方法来更改 Pandas 组

  7. 7

    有没有更快的方法来添加我的多对多DBIC关系?

  8. 8

    有没有更快的方法来解决我的牛顿算法?

  9. 9

    有没有通用的方法来打印变量?

  10. 10

    有没有更快的方法来创建一个空数组的元素数组而不使用for循环

  11. 11

    有没有更快速的方法来进行这种平均价格循环?

  12. 12

    有没有更快,更有效的方法来保存python字典?

  13. 13

    有没有更快的方法来对SortedList进行正则表达式?

  14. 14

    有没有比cURL更快/更好的方法来检查URL是否可访问?

  15. 15

    有没有更快的方法来检测游戏功能?

  16. 16

    有没有更快的方法来获得相同的结果?

  17. 17

    有没有一种更快的方法来检查数字是否在间隔内?

  18. 18

    有没有一种更快的方法来在atom中执行拼写检查?

  19. 19

    有没有更快的方法来达到相同的结果?

  20. 20

    有没有更快的方法来检查列表中的列表是否等效?

  21. 21

    有没有更快的方法来运行SQL Where Case

  22. 22

    有没有更快的方法来解析此文本文件?

  23. 23

    有没有更快的方法来实现这种“排名”算法?

  24. 24

    有没有更快的方法来搜索一个numpy数组

  25. 25

    有没有更快的方法来执行此MongoDB查询?

  26. 26

    有没有更快的方法来在Linux中获取此输出文件

  27. 27

    有没有一种更快的方法来检查文件是否正在使用?

  28. 28

    有没有更快的方法来验证驱动器已被完全清零?

  29. 29

    有没有更快的方法来计算每小时挑选的 pcs 的总和

热门标签

归档