繁体   English   中英

熊猫在许多专栏上

[英]Pandas isin on many many columns

我想从数据框df中选择行,其中许多列中的任何一个都包含列表my_list中的值。 有几十个列,将来可能还会有更多列,因此我不想遍历列表中的每个列。

想要这样:

# for loop / iteration
for col in df.columns:
    df.loc[df[col].isin(my_list), "indicator"] = 1

也没有:

# really long indexing
df = df[(df.col1.isin(my_list) | (df.col2.isin(my_list) | (df.col3.isin(my_list) ... (df.col_N.isin(my_list)]  # ad nauseum

我也不想将数据框从宽格式重整为长格式。

我在想(希望)有一种方法可以一次完成此操作,一次将isin()应用于许多列。

谢谢!

您可以使用DataFrame.isin() ,它是一个DataFrame方法,而不是字符串方法。

new_df = df[df.isin(my_list)]

或者,您可以尝试:

df[df.apply(lambda x: x.isin(mylist)).any(axis=1)]

要么

df[df[df.columns].isin(mylist)]

即使您不是非常必要,也不需要创建列表,而是直接按如下所示进行分配。

df[df[df.columns].isin([3, 12]).any(axis=1)]

检查您的努力后:

示例数据框:

>>> df
   col_1  col_2  col_3
0      1      1     10
1      2      4     12
2      3      7     18

列表构造:

>>> mylist
[3, 12]

解决方案:

>>> df[df.col_1.isin(mylist) | df.col_2.isin(mylist) | df.col_3.isin(mylist)]
   col_1  col_2  col_3
1      2      4     12
2      3      7     18

>>> df[df.isin(mylist).any(axis=1)]
   col_1  col_2  col_3
1      2      4     12
2      3      7     18

要么 :

>>> df[df[df.columns].isin(mylist).any(axis=1)]
   col_1  col_2  col_3
1      2      4     12
2      3      7     18

要么 :

>>> df[df.apply(lambda x: x.isin(mylist)).any(axis=1)]
   col_1  col_2  col_3
1      2      4     12
2      3      7     18

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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