熊猫数据框的复杂分组

时间:2019-03-12 14:10:18

标签: python pandas dataframe pandas-groupby

我有两个数据帧: df_s_T df_data_T ,并且想要基于列中的第一个来聚合(例如,使用均值聚合功能)第二个-明智的方式。这是我的示例意思:

if (Console.KeyAvailable) 
{
    if (ConsoleKey.Pause == Console.ReadKey().Key)
     continue; 
}

可以像这样可视化:

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 d3 列示例中,所需输出数据帧中第2行的值为nan,因为在列中没有值“ 2”在 df_s_T 数据框中> d1 d3

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

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

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

提前感谢这些提议。

1 个答案:

答案 0 :(得分: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