python - 我有两个数据框 DF1 和 DF2,在特定索引处将满足 DF2 条件的行追加到 DF1 的最佳方法是什么?
问题描述
我试图在dataframe1中每个组的末尾将一行从dataframe2附加到dataframe1,但只有那些来自dataframe2的行与dataframe 1中的列值匹配(在这种情况下:匹配'Name')。
如果我有以下给出的dataframe1:
data = {
'Name':['Jill', 'Jill', 'Jill', 'Jill', 'Ryan',
'Ryan','Lilian', 'Jack', 'Jack', 'Jack'],
'Age': [15, 20, 25, 30, 23, 23, 45, 24, 65, 115]
}
df1 = pd.DataFrame(data)
df1
data2 = {
'Name':['Jack', 'Ryan',
'Lilian', 'Jill'],
'Gender': ['m', 'm', 'f', 'f']
}
df2 = pd.DataFrame(data2)
df2
我希望看到:
Name Age Gender
0 Jill 15
1 Jill 20
2 Jill 25
3 Jill 30
4 Jill f
5 Ryan 23
6 Ryan 23
7 Ryan m
8 Lilian 45
9 Lilian f
10 Jack 24
11 Jack 65
12 Jack 115
13 Jack m
我找到了最后一次出现 groupby 组的原始索引并将它们放入列表中。
使用df1.index.values.tolist()
然后正在考虑尝试设置某种循环,在附加 at 之前检查名称匹配index+1
。
解决方案
这应该工作
compare = df1.Name.unique()
df3 = df2[df2['Name'].isin(compare)]
df4 = df1.append(df3)
df5 = df4.sort_values(['Name','Age'])
df5 = df5.reset_index(drop=True)
print(df5)
输出:
Age Gender Name
0 24.0 NaN Jack
1 65.0 NaN Jack
2 115.0 NaN Jack
3 NaN m Jack
4 15.0 NaN Jill
5 20.0 NaN Jill
6 25.0 NaN Jill
7 30.0 NaN Jill
8 NaN f Jill
9 45.0 NaN Lilian
10 NaN f Lilian
11 23.0 NaN Ryan
12 23.0 NaN Ryan
13 NaN m Ryan
推荐阅读
- class - 如何创建将字段映射到另一个字段的类型(或类)?
- php - Uncaught ArgumentCountError: Too few arguments to function
- javascript - Can't select several rows from mongo database
- c - 计算行数和运算符错误的C程序
- android-studio - Trying to render a square with vaos and vbos
- linux - How to echo base64 within CURL?
- php - WooCommerce:付款后发送电子邮件不起作用
- firebase - Firebase Cloud Functions 发布到 Telegram API
- javascript - 在同一屏幕上传递道具 onPress
- python - 实时组合 JSON 对象