gpt4 book ai didi

python - 循环遍历 df 字典以合并 Pandas 中的 df

转载 作者:太空狗 更新时间:2023-10-30 00:44:44 25 4
gpt4 key购买 nike

我有以下带有数据框的字典

A = pd.DataFrame([[2, 1], [2, 1], [2, 1]], columns=['A', 'B'], index = [1, 2, 3])
B = pd.DataFrame([[1, 1], [2, 2], [3, 3]], columns=['A', 'B'], index = [1, 2, 3])
C = pd.DataFrame([[1, 2], [1, 2], [1, 2]], columns=['A', 'B'], index = [1, 2, 3])

df_all = {'df1': A, 'df2': B, 'df3': C}

我想通过它们的索引将它们“内部”合并,但是使用 for 循环进行迭代。它必须等同于做

df4 = pd.merge(A, B, left_index=True, right_index=True, how='inner')
df5 = pd.merge(df4, C, left_index=True, right_index=True, how='inner')

结果看起来像

   A_x  B_x  A_y  B_y  A  B
1 2 1 1 1 1 2
2 2 1 2 2 1 2
3 2 1 3 3 1 2

我尝试了一些愚蠢的事情

for key, value in df_all.iteritems():
df = pd.merge(value, value, left_index=True, right_index=True, how='inner')

但这给了我一个无意义的结果。

感谢您的帮助。

最佳答案

import pandas as pd
import functools

A = pd.DataFrame([[2, 1], [2, 1], [2, 1]], columns=['A', 'B'], index = [1, 2, 3])
B = pd.DataFrame([[1, 1], [2, 2], [3, 3]], columns=['A', 'B'], index = [1, 2, 3])
C = pd.DataFrame([[1, 2], [1, 2], [1, 2]], columns=['A', 'B'], index = [1, 2, 3])

df_all = {'df1': A, 'df2': B, 'df3': C}
merge = functools.partial(pd.merge, left_index=True, right_index=True, how='inner')
df = functools.reduce(merge, df_all.values())
print(df)

产量

   A_x  B_x  A_y  B_y  A  B
1 2 1 1 2 1 1
2 2 1 1 2 2 2
3 2 1 1 2 3 3

请注意,df_all.values() 以未指定的顺序返回 dict 中的值。如果你想要一个特定的订单,你必须做一些事情,比如按键排序......


或者,您可以使用 pd.concat 创建具有分层列的 DataFrame:

df = pd.concat(df_all, axis=1).dropna(axis=0)
print(df)

产量

   df1     df2     df3   
A B A B A B
1 2 1 1 1 1 2
2 2 1 2 2 1 2
3 2 1 3 3 1 2

(警告:使用 pd.concat 在这里很脆弱——我假设 DataFrames 没有 NaN 值,但可能有不同的索引。dropna 是然后用于生成内部连接。)

关于python - 循环遍历 df 字典以合并 Pandas 中的 df,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25656126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com