问题描述
我在python熊猫中有一个具有相同行名和行值的数据帧列表。 我想做的是产生一个数据框,并在行值上内部连接它们。 我在网上看了一下,发现合并功能,但是这行不通,因为我的行不是列。 有谁知道最好的方法吗? 是否可以采用行值并将其转换为列的解决方案,如果是的话,您该怎么做? 谢谢您的帮助。
输入:
"happy"
userid
1 2
2 8
3 9
"sad"
userid
1 9
2 12
3 11
输出:
"sad" "happy"
userid
1 9 2
2 12 8
3 11 9
1楼
交换DataFrame的列和行。
如果dfs
是您的DataFrames列表,则:
dfs = [df.T for df in dfs]
将使dfs
成为转置DataFrame的列表。
然后合并:
merged = dfs[0]
for df in dfs[1:]:
merged = pd.merge(merged, df, how='inner')
默认情况下, 基于共同共享的所有列合并DataFrame。
请注意,转置需要将原始DataFrame中的所有数据复制到新DataFrame中。 从头开始(如果可能)以正确的(转置的)格式构建DataFrame会比在以后通过转置修复它的效率更高。
2楼
看起来您的DataFrames具有索引,在这种情况下, merge()
应该指出它是如何进行的:
In [51]: df1
Out[51]:
"happy"
userid
1 2
2 8
3 9
In [52]: df2
Out[52]:
"sad"
userid
1 9
2 12
3 11
In [53]: pd.merge(df2, df1, left_index=True, right_index=True)
Out[53]:
"sad" "happy"
userid
1 9 2
2 12 8
3 11 9
而且,如果要在DataFrames列表上运行此代码,只需它们:
reduce(lambda x, y: pd.merge(x, y, left_index=True, right_index=True), list_of_dfs)