python - 在多对一/多上使用合并
问题描述
我在下面有两个数据框,我想将它们合并以获取 df1 上的 ID。但是,我发现通过使用合并,如果名称不止一个,我将无法获取 ID。df2 具有唯一的名称,df1 和 df2 的行和列不同。我的代码如下:
df1:
Name Region
0 P Asia
1 Q Eur
2 R Africa
3 S NA
4 R Africa
5 R Africa
6 S NA
df2:
Name Id
0 P 1234
1 Q 1244
2 R 1233
代码:
x= df1.assign(temp1 = df1.groupby ('Name').cumcount())
y= df2.assign(temp1 = df2.groupby ('Name').cumcount())
xy= x.merge(y, on=['Name',temp2],how = 'left').drop(columns = ['temp1'])
xy 的输出如下,如何找到那些 NAN 的 Id?
Name Region Id
0 P Asia 1234
1 Q Eur 1244
2 R Africa NAN
3 S NA NAN
4 R Africa NAN
5 R Africa NAN
6 S NA NAN
解决方案
- 您的语法已关闭 on
temp2
。首先,你忘记了引号。其次,它应该'temp1'
代替temp2
. - 您合并了两列。如果您只合并
Id
,那么您将没有NaN
价值。但是,由于您在 上合并temp1
,因此有一些数据在数据帧中不匹配。第二个数据框中的列中没有S
值Name
,因此您希望合并后NaN
的值。S
- 如果您的目标是现在填充这些
NaN
值但使用不同的方法,那么您可以做到这一点。这就是你想要做的,现在只需合并Id
而不是Id
andtemp1
。你是这个意思吗?
x= df1.assign(temp1 = df1.groupby ('Name').cumcount())
y= df2.assign(temp1 = df2.groupby ('Name').cumcount())
xy= x.merge(y, on=['Name','temp1'],how='left').drop('temp1')
xy
Out[1]:
Name Region Id
0 P Asia 1234.0
1 Q Eur 1244.0
2 R Africa 1233.0
3 S NaN NaN
4 R Africa NaN
5 R Africa NaN
6 S NaN NaN
推荐阅读
- pine-script - 如果引用是 Pine Script V4 中的变量怎么办?
- django - Mongodb django 设置
- react-native - 反应原生项目不在 iOS 上显示图像但在 android 上工作正常
- c++ - 检查输入的数字是否为 Armstrong 的程序对 153 给出错误答案,但对 370 给出正确答案
- wordpress - 如何在 Yoast SEO WordPress 插件中使用 %%currentdate%% 变量
- python - 在Python中乘以不同维度的矩阵
- python - 在pygame中计算从玩家到光标的角度有问题
- ios - 在 ios 的深度链接中,如何识别哪个应用程序启动了我的应用程序?
- mysql - 加入 2 个表并在 codeigniter 中对条件求和
- reactjs - Nextjs:“承诺”类型上不存在属性“数据”
>'