![](/img/trans.png)
[英]How to join 2 tables with getting all rows from left table and only matching ones in right
[英]How to get column names that belong only to a right table that we brought in left join
我正在做一个跟随左连接
left_join = left.merge(right, how="left", left_on=[attr1], right_on=[attr2])
我现在如何获得仅属于左连接中的右表的列的名称? 如果我们带有相同的名称列,pandas有时会重命名列,所以我不能只从右表中获取列的名称。 此外,由于我们合并了一个属性,其中一列不会出现,因此我需要以某种方式从left_join
提取它们。
谢谢!
编辑:我的解决方案比我预期的简单。 我解决了它
names = left_join.columns.values
names[left.shape[1]:]
# Get column names from `right` that were a part of the merge key.
m1 = left_join.columns.isin(right.columns)
# Get column names that were appended with suffix "_y".
m2 = left_join.columns.str.endswith('_y')
left_join.iloc[:, m1 | m2]
如果您想要的只是right
列,请将上面的最后一行代码替换为
left_join.iloc[:, m2]
您可以在merge
之前使用过滤器,然后rename
left_join = left[attr1].\
merge(right, how="left", left_on=[attr1], right_on=[attr2]).\
rename(columns=dict(zip(attr1,attr2)))
suffixes
参数 如果存在任何重叠列,则可以使用suffixes
参数控制附加到列名称的内容。
left.merge(right, 'left', left_on=attr1, right_on=attr2, suffixes=['_', ''])
A B_ B C D E F
0 1 4 10.0 X I 7.0 1.0
1 2 5 11.0 Y J 8.0 2.0
2 3 6 NaN NaN NaN NaN NaN
请注意,重叠列名称'B'
的后缀为'_'
,后者来自left
数据帧,后缀''
(是的,空字符串)附加到right
数据帧的列名称。
现在,我从列名right
是相同的名称从列right
left.merge(right, 'left', left_on=attr1, right_on=attr2, suffixes=['_', ''])[[*right]]
B C D E F
0 10.0 X I 7.0 1.0
1 11.0 Y J 8.0 2.0
2 NaN NaN NaN NaN NaN
[[*right]]
right.columns.tolist()
['C', 'D', 'E', 'F']
或者当我提出答案时
[*right]
['C', 'D', 'E', 'F']
left = pd.DataFrame(dict(
A=[1, 2, 3],
B=[4, 5, 6],
))
right = pd.DataFrame(dict(
B=[10, 11, 12],
C=[*'XYZ'],
D=[*'IJK'],
E=[7, 8, 9],
F=[1, 2, 4]
))
attr1 = 'A'
attr2 = 'F'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.