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.merge
或 pandas.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
两个问题:
- 在
axis 0
上串联(应该是 axis 1
)。
- 有两份列'A'。您可以在
df2
. 中挑出 '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
我在列表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.merge
或 pandas.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
两个问题:
- 在
axis 0
上串联(应该是axis 1
)。 - 有两份列'A'。您可以在
df2
. 中挑出
'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