我有100只熊猫DataFrames
。它们具有相同的结构,两列:x
和y
。我目前正试图通过列join
x
全部计算它们,并计算列y
的平均值。然而,我遇到的问题是,生成的DataFrame
只有两列x
和y
(而不是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
答案 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