[英]Python pandas: concat two DataFrames with different number of rows by duplication
[英]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
有人可以指出我正确的方向吗?
两个问题:
axis 0
上连接(应该是axis 1
)。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.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
这是一种方法。 这种方法的好处是它适用于任意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.