繁体   English   中英

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

[英]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

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

两个问题:

  1. axis 0上连接(应该是axis 1 )。
  2. 有两个“A”列的副本。 您可以在df2挑出'Value2'

所以:

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

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

这是一种方法。 这种方法的好处是它适用于任意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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM