首页 > 解决方案 > 熊猫迭代非常慢

问题描述

iterrows在迭代 Pandas 数据框时,我需要一些帮助。我有一个像这样的 Pandas 数据框:

| cust_no | channel  | month1 | month2 |
|   1     | radio    | 0.7    | 0.4    |
|   1     | fb       | 0.1    | 0.5    |
|   1     | tv       | 0.2    | 0.1    |
|   2     | fb       | 0.5    | 0.25   |
|   2     | radio    | 0.4    | 0.25   |
|   2     | tv       | 0.1    | 0.5    |

我需要按 cust_no 分组时每个月具有最大值的通道,并将它们作为字符串加入同一数据帧的新列中。因此,例如,从上面的数据框:

在客户 1 的情况下,在第 1 个月radio有最大值,但fb在第 2 个月有最大值,所以我需要这个字符串:radio>fb

在客户 2 的情况下,在第 1 个fb月有最大值,但tv在第 2 个月有最大值,所以我需要这个强大的:fb>tv

感谢任何帮助。谢谢。Performance is really important

标签: python-3.xpandas

解决方案


channel通过by创建索引DataFrame.set_index,然后使用DataFrameGroupBy.idxmax和最后使用 apply+join

df1 = (df.set_index('channel')
         .groupby('cust_no')['month1','month2']
         .idxmax()
         .apply('>'.join, axis=1)
         .reset_index(name='new'))
print (df1)
   cust_no       new
0        1  radio>fb
1        2     fb>tv

如果没有其他列是可能的删除过滤列month1month2

df1 = (df.set_index('channel')
         .groupby('cust_no')
         .idxmax()
         .apply('>'.join, axis=1)
         .reset_index(name='new'))
print (df1)
   cust_no       new
0        1  radio>fb
1        2     fb>tv

推荐阅读