首页 > 解决方案 > 有没有办法在 DF 中找到一个列索引,它的整个值与使用 python 的另一列匹配

问题描述

请原谅我对python的拙见,所以重点是在同一个df中找到所有值都与column_1匹配的column_x索引,然后我可以使用drop从column_x中删除列直到最后df.drop(df [column_x:-1] )

有什么想法吗?

谢谢

##数据样本##

#     A      B  C   D
#    0     one  0   0
#    2     two  2   4
#    4     two  4   8
#    6     one  6  12
#    7   three  7  14

所以重点是找到哪些列值与A列匹配,在上述情况下是C列,因此C列将被删除,并且使用df.drop(df.columns [column C index:-1]之后的任何列) )

最终结果:

#     A      B   
#    0     one   
#    2     two   
#    4     two    
#    6     one  
#    7   three  

标签: pythonpandas

解决方案


idx = (df.values == df.iloc[:, 0].values[:, None]).all(axis=0)[1:].argmax() + 1

解释:

  • 将所有列按元素与第一列进行比较。请注意,右侧为列值添加了额外的维度,以便 numpy 可以广播其值以进行比较。

    (df.values == df.iloc[:, 0].values[:, None])

  • 找到所有的列True

    (...).all(axis=0)

  • 查找除第一个之外的第一个完全匹配列的索引。加 1 以补偿未使用的第一列

    (...)[1:].argmax() + 1


推荐阅读