Pandas: 使用一个公共列合并多个DataFrame
Pandas: Merge multiple DataFrames using one common column
我正在处理多个数据框,每个数据框都有一个共同的列,即 post_id。每个 df 的示例:
post_id post_likes
0 1
1 2
2 3
3 4
4 5
5 6
所以每个 df 都有一列,其中有 post_id,但在每个后续 df 中还有另一列,例如喜欢,总计数,姓名等。有什么办法可以根据 post_id 将所有这些 dfs 组合成一个,因为我的最终目标是将此数据帧写入 csv。
import pandas as pd
df1 = pd.DataFrame(columns=['post_id','post_likes'], data={'post_id': range(6), 'post_likes': range(1,7)})
df2 = pd.DataFrame(columns=['post_id','post_shares'], data={'post_id': range(6), 'post_shares': range(11,17)})
pd.merge(df1,df2,on='post_id')
Out[12]:
post_id post_likes post_shares
0 0 1 11
1 1 2 12
2 2 3 13
3 3 4 14
4 4 5 15
5 5 6 16
假设我有一长串数据帧,所有数据帧都有一列标记为 post_id
和另一列。
lodf = [df1, df2, df3, df4, df5]
您可以将它们与 pd.concat
放在一起。你只需要先设置索引
df = pd.concat([d.set_index('post_id') for d in lodf], axis=1).reset_index()
演示
df1 = pd.DataFrame(dict(post_id=[1, 2, 3], col1=[1, 2, 3]))
df2 = pd.DataFrame(dict(post_id=[1, 2, 3], col2=[1, 2, 3]))
df3 = pd.DataFrame(dict(post_id=[1, 2, 3], col3=[1, 2, 3]))
df4 = pd.DataFrame(dict(post_id=[1, 2, 3], col4=[1, 2, 3]))
df5 = pd.DataFrame(dict(post_id=[1, 2, 3], col5=[1, 2, 3]))
lodf = [df1, df2, df3, df4, df5]
df = pd.concat([d.set_index('post_id') for d in lodf], axis=1).reset_index()
df
post_id col1 col2 col3 col4 col5
0 1 1 1 1 1 1
1 2 2 2 2 2 2
2 3 3 3 3 3 3
我正在处理多个数据框,每个数据框都有一个共同的列,即 post_id。每个 df 的示例:
post_id post_likes
0 1
1 2
2 3
3 4
4 5
5 6
所以每个 df 都有一列,其中有 post_id,但在每个后续 df 中还有另一列,例如喜欢,总计数,姓名等。有什么办法可以根据 post_id 将所有这些 dfs 组合成一个,因为我的最终目标是将此数据帧写入 csv。
import pandas as pd
df1 = pd.DataFrame(columns=['post_id','post_likes'], data={'post_id': range(6), 'post_likes': range(1,7)})
df2 = pd.DataFrame(columns=['post_id','post_shares'], data={'post_id': range(6), 'post_shares': range(11,17)})
pd.merge(df1,df2,on='post_id')
Out[12]:
post_id post_likes post_shares
0 0 1 11
1 1 2 12
2 2 3 13
3 3 4 14
4 4 5 15
5 5 6 16
假设我有一长串数据帧,所有数据帧都有一列标记为 post_id
和另一列。
lodf = [df1, df2, df3, df4, df5]
您可以将它们与 pd.concat
放在一起。你只需要先设置索引
df = pd.concat([d.set_index('post_id') for d in lodf], axis=1).reset_index()
演示
df1 = pd.DataFrame(dict(post_id=[1, 2, 3], col1=[1, 2, 3]))
df2 = pd.DataFrame(dict(post_id=[1, 2, 3], col2=[1, 2, 3]))
df3 = pd.DataFrame(dict(post_id=[1, 2, 3], col3=[1, 2, 3]))
df4 = pd.DataFrame(dict(post_id=[1, 2, 3], col4=[1, 2, 3]))
df5 = pd.DataFrame(dict(post_id=[1, 2, 3], col5=[1, 2, 3]))
lodf = [df1, df2, df3, df4, df5]
df = pd.concat([d.set_index('post_id') for d in lodf], axis=1).reset_index()
df
post_id col1 col2 col3 col4 col5
0 1 1 1 1 1 1
1 2 2 2 2 2 2
2 3 3 3 3 3 3