Python Pandas 具有不同列和相同行的数据帧的连接列表

Python Pandas Concat list of Dataframes With Different Columns and Same Rows

我在列表Pandas中有两个或更多数据帧

A Value1
1 ABC
2 HYT
3 IUF

A Value2
1 IJT
2 GFH
3 QER

使用时

df = pd.concat(dfs, axis = 0)

并且写入CSV后,最终输出是这样的

A Value1 Value2
1 ABC
1        IJT
2 HYT
2        GFH
3 IUF
3        QER

但我希望它是这样的

A Value1 Value2
1 ABC    IJT
2 HYT    GFH
3 IUF    QER

有人能指出我正确的方向吗?

您可以使用 pandas.mergepandas.concat

获得想要的结果
import pandas as pd

df1 = pd.DataFrame({"A": [1, 2, 3], 
"Value1": ['ABC', 'HYT', 'IUF']})

df2 = pd.DataFrame({"A": [1, 2, 3], 
"Value2": ['IJT', 'GFH', 'QER']})

df_merge= pd.merge(df1, df2, how='left', on=["A"])

df_concat = pd.concat([df1, df2['Value2']], axis = 1)

print(df_merge)
print(df_concat)

pandas.merge 的预期输出:

   A Value1 Value2
0  1    ABC    IJT
1  2    HYT    GFH
2  3    IUF    QER

pandas.concat 的预期输出:

   A Value1 Value2
0  1    ABC    IJT
1  2    HYT    GFH
2  3    IUF    QER

两个问题:

  1. axis 0 上串联(应该是 axis 1)。
  2. 有两份列'A'。您可以在 df2.
  3. 中挑出 'Value2'

所以:

df1, df2 = dfs
pd.concat((df1, df2['Value2']), axis=1)

returns

   A Value1 Value2
0  1    ABC    IJT
1  2    HYT    GFH
2  3    IUF    QER

这是一种方法。这种方法的好处是它适用于任意 lst,前提是每个数据框都有列 'A'.

lst = [df1, df2]

df = pd.concat([i.set_index('A') for i in lst], axis=1).reset_index()

#    A Value1 Value2
# 0  1    ABC    IJT
# 1  2    HYT    GFH
# 2  3    IUF    QER