如何合并两个熊猫DataFrame并保持重复的值?

我有以下两个熊猫DataFrame:

第一个:

df1 = pd.DataFrame({'Name':['John','John','Paul','Jimmy'],'Book':['B1','B2','B1','B3','B4','B3']})
╔═══════╦══════╗
║ Name  ║ Book ║
╠═══════╬══════╣
║ John  ║ B1   ║
║ John  ║ B2   ║
║ John  ║ B1   ║
║ Paul  ║ B3   ║
║ Paul  ║ B4   ║
║ Jimmy ║ B3   ║
╚═══════╩══════╝

第二个:

df2 = pd.DataFrame({'Name':['John','Age':[25,18,28]})
╔═══════╦═════╗
║ Name  ║ Age ║
╠═══════╬═════╣
║ John  ║  25 ║
║ Paul  ║  18 ║
║ Jimmy ║  28 ║
╚═══════╩═════╝

我希望结果是:

╔═══════╦══════╦═════╗
║ Name  ║ Book ║ Age ║
╠═══════╬══════╬═════╣
║ John  ║ B1   ║  25 ║
║ John  ║ B2   ║  25 ║
║ John  ║ B1   ║  25 ║
║ Paul  ║ B3   ║  18 ║
║ Paul  ║ B4   ║  18 ║
║ Jimmy ║ B3   ║  28 ║
╚═══════╩══════╩═════╝

也就是说,使用“名称”列作为键,将“年龄”列添加到第一数据框,并保留重复的名称。

fajkasjifise 回答:如何合并两个熊猫DataFrame并保持重复的值?

这很简单:

df1 = pd.DataFrame({'Name':['John','John','Paul','Jimmy'],'Book':['B1','B2','B1','B3','B4','B3']})

df2 = pd.DataFrame({'Name':['John','Age':[25,18,28]})

df1.merge(df2)

Out[22]: 
    Name Book  Age
0   John   B1   25
1   John   B2   25
2   John   B1   25
3   Paul   B3   18
4   Paul   B4   18
5  Jimmy   B3   28
,

使用import pandas as pd df = pd.DataFrame({'id':[1,1,2,4],'wave':['C','A','B','C','A']}) df['wave_num'] = df['wave'].apply(lambda x: ord(x)) df['difference'] = df.groupby('id')['wave_num'].diff() list(df.loc[(df.difference<0)]['id'].unique()) set_index

map

输出:

df1['Age'] = df1['Name'].map(df2.set_index('Name')['Age'])
print(df1)

映射将比合并更快,因为我们仅映射单个列。

  

%timeit df1 ['Age'] = df1 ['Name']。map(df2.set_index('Name')['Age'])
  每个循环1.22 ms±34.4 µs(平均±标准偏差,共运行7次,每个循环1000个)

     

%timeit df1.merge(df2)
  每个循环2.93 ms±73.3 µs(平均±标准偏差,共运行7次,每个循环100个循环)

本文链接:https://www.f2er.com/3165502.html

大家都在问