熊猫数据帧的复杂组合

问题描述 投票:0回答:1

我有两个数据帧:df_s_T和df_data_T,并希望以列方式聚合(例如使用平均聚合函数)第二个数据框。这是我的例子:

ind = ['d1','d2','d3','d4']
my_data_ints = {'s1': [1, 2, 1, 2], 's2': [1, 2, 1, 1],'s3': [1, 1, 1, 1]}
df_s_T = pd.DataFrame(data=my_data_ints, index = ind).T
my_data = {'s1': [-1, 2, 5, 12], 's2': [-2, 2, 4, 10.5], 's3': [1, 2, 3, 4]}
df_data_T = pd.DataFrame(data=data, index = ind).T

这可以像这样可视化:

print df_data_T
print df_s_T
     d1   d2   d3    d4
s1 -1.0  2.0  5.0  12.0
s2 -2.0  2.0  4.0  10.5
s3  1.0  2.0  3.0   4.0
    d1  d2  d3  d4
s1   1   2   1   2
s2   1   2   1   1
s3   1   1   1   1

期望的输出(计算具有相等值的所有行的每列的平均值):

     d1   d2   d3     d4                    
1  -0.66  2.0  4.0   7.25
2   nan   2.0  nan  12.00

在我的d1和d3列示例中,所需输出数据帧中第2行的值为nan,因为df_s_T数据帧中的列d1和d3中没有值“2”。

我成功完成的是通过固定列(例如最后一列)进行聚合,见下文

df_data_T_new = df_data_T.groupby(df_s_T.iloc[:,-1]).mean()
df_data_T_new
     d1   d2   d3     d4
d4                      
1  -0.5  2.0  3.5   7.25
2  -1.0  2.0  5.0  12.00

我想创建一个智能解决方案,可能没有编写循环。它应该以某种方式首先获取df_data_T中的所有可能值,以便正确构建结果数据帧。

提前感谢这些提议。

python pandas dataframe pandas-groupby
1个回答
2
投票

也许想到使用zipconcat的结果

pd.concat([df1[x].groupby(df2[y]).mean() for x , y in zip(df1,df2)],axis=1)
Out[44]: 
          d1   d2   d3     d4
d4                           
1  -0.666667  2.0  4.0   7.25
2        NaN  2.0  NaN  12.00
© www.soinside.com 2019 - 2024. All rights reserved.