Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-在单独的列中聚合值_Python_Pandas_Dataframe_Sum_Aggregate - Fatal编程技术网

Python-在单独的列中聚合值

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)的聚合值。聚合值应位于主实体的行中 所以,我的初始

我是Python新手,我想知道是否有人能帮我完成以下任务

我有以下数据帧df和以下列:

  • 主ID
  • 次要ID
  • 实体类型
  • 价值观
每个主要实体(实体类型:A)可能由一些次要实体(实体类型;X或Y)组成。对于实体类型A,主id与次id相同。此外,每个主实体和每个次实体都有一个值

在列'Sum of values Secondary id X'和'Sum of values Secondary id Y'中,我希望获得对应于每个主实体的次实体(X和Y)的聚合值。聚合值应位于主实体的行中

所以,我的初始df是:

主ID 次要ID 实体类型 价值 0109 0109 A. 200 0109 A234 X 100 0109 A234 X 50 9996 9996 A. 400 9996 AAGT X 120 9996 AABG X 30 9996 0082 Y 50 A765 A765 A. 50
第一个解决方案首先由替换
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