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

时间:2018-03-02 16:55:03

标签: python pandas dataframe concat

我在列表中的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

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

3 个答案:

答案 0 :(得分:1)

两个问题:

  1. 联接axis 0(应为axis 1)。
  2. 有两份专栏' A'。您只需在'Value2'中单挑df2
  3. 所以:

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

    返回

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

答案 1 :(得分:0)

您可以使用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

答案 2 :(得分:0)

这是一种方法。如果每个数据框都有“A”列,则此方法的好处是适用于任意lst

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