繁体   English   中英

如何获取仅属于我们在左连接中引入的右表的列名

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM