我有两个数据帧: 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 中获取所有可能的值,以便正确构建生成的数据帧。
提前感谢这些提议。
答案 0 :(得分:2)
也许考虑使用zip
和concat
返回结果
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