我有一个如下所示的数据框:
|id|name|start_date|clicks|conversions|installs|downloads|
|--|----|----------|------|-----------|--------|-----------|
|101|India|2023-06-06|1|4|0|NaN|
|101|India|2023-06-06|2|5|0|NaN|
|101|India|2023-06-06|1|6|0|NaN|
|201|Kenya|2023-09-15|5|8|0|NaN|
|201|Kenya|2023-09-15|2|1|0|NaN|
|201|NaN|NaN|NaN|NaN|NaN|10|
|201|NaN|NaN|NaN|NaN|NaN|5|
|201|NaN|NaN|NaN|NaN|NaN|4|
我的代码是这样的:
pivot_df = pd.pivot_table(
df,
index=['id','name','start_date'],
aggfunc={'clicks': 'sum','conversions': 'sum','installs': 'sum', 'downloads': 'sum'})
输出为:
|id|name|start_date|clicks|conversions|installs|downloads|
|--|----|----------|------|-----------|--------|-----------|
|101|India|2023-06-06|4|15|0|0|
|201|Kenya|2023-09-15|7|9|0|0|
输出是我预期得到的
|id|name|start_date|clicks|conversions|installs|downloads|
|--|----|----------|------|-----------|--------|-----------|
|101|India|2023-06-06|4|15|0|0|
|201|Kenya|2023-09-15|7|9|0|19|
转换总和为 0 而不是 19。我做错了什么?
您可能不需要
pivot_table
而是 groupby.agg
:
out = (df.groupby('id', as_index=False)
.agg({'name': 'first',
'start_date': 'first',
'clicks': 'sum',
'conversions': 'sum',
'installs': 'sum',
'downloads': 'sum'})
)
输出:
id name start_date clicks conversions installs downloads
0 101 India 2023-06-06 4.0 15.0 0.0 0.0
1 201 Kenya 2023-09-15 7.0 9.0 0.0 19.0