Python-在单独的列中聚合值
我是Python新手,我想知道是否有人能帮我完成以下任务 我有以下数据帧df和以下列:Python-在单独的列中聚合值,python,pandas,dataframe,sum,aggregate,Python,Pandas,Dataframe,Sum,Aggregate,我是Python新手,我想知道是否有人能帮我完成以下任务 我有以下数据帧df和以下列: 主ID 次要ID 实体类型 价值观 每个主要实体(实体类型:A)可能由一些次要实体(实体类型;X或Y)组成。对于实体类型A,主id与次id相同。此外,每个主实体和每个次实体都有一个值 在列'Sum of values Secondary id X'和'Sum of values Secondary id Y'中,我希望获得对应于每个主实体的次实体(X和Y)的聚合值。聚合值应位于主实体的行中 所以,我的初始
- 主ID
- 次要ID
- 实体类型
- 价值观
第一个解决方案首先由替换
Value
s中缺少的值来使用,然后对于使用的新列,最后一个替换重复项为中的0
:
如果需要将所有值用于新列,请使用:
尝试使用以下方法创建dict:
(df.groupby(['Primary ID', 'Entity type'])['Value']
.sum()
.unstack(-1)
.fillna(0).reset_index()
)
以上数据可以转换成dict,然后您可以映射 完整解决方案:
map_df = (df.groupby(['Primary ID', 'Entity type'])['Value']
.sum()
.unstack(-1)
.fillna(0).reset_index()
).drop(['A'], axis=1).set_index('Primary ID')
df:
map_df = (df.groupby(['Primary ID', 'Entity type'])['Value']
.sum()
.unstack(-1)
.fillna(0).reset_index()
).drop(['A'], axis=1).set_index('Primary ID')
次要ID
实体类型
价值
纽约
纽约
主ID
0109
0109
A.
200
150
0
0109
A234
X
100
0
0
0109
A234
X
50
0
0
9996
9996
A.
400
150
50
9996
AAGT
X
120
0
0
9996
AABG
X
30
0
0
9996
0082
Y
50
0
0
A765
A765
A.
50
0
0
@Pygirl-是的,我猜是同样的问题-有人认为我的第一个解决方案不好,所以被否决了。
Entity type Primary ID A X Y
0 0109 200.0 150.0 0.0
1 9996 400.0 150.0 50.0
2 A765 50.0 0.0 0.0
map_df = (df.groupby(['Primary ID', 'Entity type'])['Value']
.sum()
.unstack(-1)
.fillna(0).reset_index()
).drop(['A'], axis=1).set_index('Primary ID')
df.set_index('Primary ID', inplace=True)
df.loc[df['Entity type'].eq('A'),['new_x', 'new_y']] = map_df.values