Python 寻找至少有5笔交易的客户-寻找更整洁的方式
我有一个包含客户事务的数据框架:Python 寻找至少有5笔交易的客户-寻找更整洁的方式,python,pandas,Python,Pandas,我有一个包含客户事务的数据框架: customer_id transaction_amount 0 bob 12 1 bob 34 2 bob 56 3 bob 23 4 mary 12 5 mary
customer_id transaction_amount
0 bob 12
1 bob 34
2 bob 56
3 bob 23
4 mary 12
5 mary 34
6 mary 3
7 mary 53
8 mary 23
9 mary 12
10 mary 5
11 jim 2
12 jim 5
我想找到至少有5笔交易的客户
我现在做的很好,但看起来很乱。这是一个非常丑陋的团体
I按customer\u id
分组,计算交易金额
df.groupby('customer_id')['transaction_amount'].count()
customer_id
bob 4
jim 2
mary 7
然后我使用相同的groupby创建了一个掩码,但是我添加了过滤器=5
,然后得到结果的索引
mask = (df.groupby('customer_id')['transaction_amount'].count()>=5)
df.groupby('customer_id')['transaction_amount'].count()[mask].index
这给了我一个结果:
Index(['mary']
肯定有更整洁的方法吗?两个GroupBy站在一起感觉不对
这是我在工作中所做的一个操作,所以我想知道它是否可以更简洁或更“Pythic”。
import pandas as pd
df = pd.DataFrame({'name':['bob','bob','mary','mary','mary','jim']})
cnt = df.name.value_counts()
morethan3 = list(cnt.where(cnt>=3).dropna().index)
print(morethan3)
输出
['mary']
说明:value\u counts()
returnpandas.Series
索引为调查对象,值为发生次数,用“<代码> >替换< <代码>楠< /COD>所有值> <代码> > <代码>,然后使用<代码>丢弃Non。DROPNA < /C> >最后取剩下的索引。 < P> >可以避免使用<代码> PANDASS。
import pandas as pd
df = pd.DataFrame({'name':['bob','bob','mary','mary','mary','jim']})
cnt = df.name.value_counts()
morethan3 = list(cnt.where(cnt>=3).dropna().index)
print(morethan3)
输出
['mary']
说明:value\u counts()
returnpandas.Series
索引为调查对象,值为发生次数,我使用将所有不是=3
的值替换为NaN
,然后使用.dropna
放弃NaN,最后获取剩余的索引。假设每一个具有客户id的行都是唯一的事务,您根本不需要groupby。您可以使用值\u计数
s = df['customer_id'].value_counts()
s[s >= 5].index
假设具有customer_id的每一行都是唯一的事务,您根本不需要groupby。您可以使用值\u计数
s = df['customer_id'].value_counts()
s[s >= 5].index
++ve代表好的简单的解决方案,干杯。++ve代表好的简单的解决方案,干杯。