首页 > 解决方案 > Python Pandas:如何遍历具有公共列值的行

问题描述

我有一个看起来像这样的数据框:

In [3]df
Out[3]: 
   customer  monthly_revenue
0        a                2
1        a                4
2        a                1
3        b                3
4        b                3
5        b                3
6        b                2
7        b                5
8        c               10
9        c                5

对于每个客户,我想遍历他们的月收入数字,并计算有多少数据点超过或低于某个阈值。在这里进行迭代的最佳方法是什么?我想要的结果是:

      customer  rev_over_2  rev_over_5
0        a        0.33         0.0
1        b        0.80         0.2
2        c        1.00         1.0

第二列表示超过 2 的数据点的百分比,第三列表示超过 5 的数据点的百分比。

谢谢!

标签: python-3.xpandas

解决方案


使用Series groupby+transform sum

thresh=2
(df['monthly_revenue']>thresh).groupby(df.customer).transform('sum')
Out[175]: 
0    1.0
1    1.0
2    1.0
3    4.0
4    4.0
5    4.0
6    4.0
7    4.0
8    2.0
9    2.0
Name: monthly_revenue, dtype: float64

更新

pd.crosstab(df.customer,(df['monthly_revenue']>thresh),normalize ='index')[True]
Out[191]: 
customer
a    0.333333
b    0.800000
c    1.000000
Name: True, dtype: float64

推荐阅读