我有以下数据帧:
data = {'Customer_ID': ['123','2','1010','123'],
'Date_Create': ['12/08/2010','04/10/1998','27/05/2010','12/08/2010'],
'Purchase':[1,1,0,1]
}
df = pd.DataFrame(data, columns = ['Customer_ID', 'Date_Create','Purchase'])
我想执行这个查询:
df_2 = df[['Customer_ID','Date_Create','Purchase']].groupby(['Customer_ID'],
as_index=False).sum().sort_values(by='Purchase', ascending=False)
此查询的目标是对所有购买(布尔字段)求和,并输出一个包含 3 列的数据框:'Customer_ID', 'Date_Create','Purchase
问题是:字段 Date_Create
不在查询中,因为它有重复,因为帐户的 date_creation 没有改变。
我该如何解决?
谢谢
答案 0 :(得分:1)
如果每个 groupby
的值相同,您可以将列 Customer_ID
添加到 (df.groupby(['Customer_ID','Date_Create'], as_index=False)['Purchase']
.sum()
.sort_values(by='Purchase', ascending=False))
:
date
如果没有,请使用一些聚合函数 - 例如GroupBy.first
用于每组的前 (df.groupby('Customer_ID')
.agg(Purchase = ('Purchase', 'sum'), Date_Create= ('Date_Create', 'first'))
.reset_index()
.sort_values(by='Purchase', ascending=False))
:
{{1}}
答案 1 :(得分:1)
如果我理解正确并且您的源数据有一些重复,
有一个专门用于此的函数,dataframe.drop_duplicates()
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop_duplicates.html
要仅考虑重复检查中的某些列,请使用 subset
:
df2 = df.drop_duplicates(subset=['Customer_ID','Date_Create'])