通过相同的列和求和连接多个pandas数据帧

时间:2017-03-20 21:38:09

标签: python pandas

我有100只熊猫DataFrames。它们具有相同的结构,两列:xy。我目前正试图通过列join x全部计算它们,并计算列y的平均值。然而,我遇到的问题是,生成的DataFrame只有两列xy(而不是100 y列)。我发现我应该使用concat,但它没有按照我的预期工作,任何想法?

e.g。

import pandas as pd

# ...

result = pd.concat(dfs, axis=1, keys=["x"], join="inner")

print result


#        x
#        x      y
# 0      0.120  687.46
# 1      0.122  691.03

1 个答案:

答案 0 :(得分:3)

pd.concat将指定轴上的数据帧连接起来。参数keys应该用于多级轴。

试试这个:

数据:

In [26]: dfs
Out[26]:
[   x   y
 0  1  11
 1  2  12
 2  3  13,    x   y
 0  1  21
 1  2  22
 2  3  23]

In [27]: dfs[0]
Out[27]:
   x   y
0  1  11
1  2  12
2  3  13

In [28]: dfs[1]
Out[28]:
   x   y
0  1  21
1  2  22
2  3  23

解决方案:

In [29]: pd.concat(map(lambda x: x.set_index('x'), dfs), axis=1)
Out[29]:
    y   y
x
1  11  21
2  12  22
3  13  23

或使用列表理解:

In [34]: pd.concat([x.set_index('x') for x in dfs], axis=1)
Out[34]:
    y   y
x
1  11  21
2  12  22
3  13  23

计算每列的平均值

In [35]: pd.concat([x.set_index('x') for x in dfs], axis=1).mean()
Out[35]:
y    12.0
y    22.0
dtype: float64

每行平均值:

In [36]: pd.concat([x.set_index('x') for x in dfs], axis=1).mean(1)
Out[36]:
x
1    16.0
2    17.0
3    18.0
dtype: float64

<强>更新

In [8]: pd.concat([x.set_index('x') for x in dfs], axis=1).mean(1).reset_index(name='y')
Out[8]:
   x     y
0  1  16.0
1  2  17.0
2  3  18.0