【问题标题】:Select column by startswith during iterrows()在 iterrows() 期间通过startswith选择列
【发布时间】:2021-08-05 18:08:54
【问题描述】:

我有一个包含 100 多列的数据框:

例如,如果列名以'action.malware' 开头并且列值为True,我想在iterrows() 期间分配事件类型列'Malware'。

我想做这样的事情:

for index, value in df3.iterrows():
    if value.startswith('action.malware'): #line2
        df3.loc[i,value]== True:           #line3
            df3.loc[i,'Incident Type'] = 'Malware'

并在第 2 行获得 AttributeError: 'Series' object has no attribute 'startswith' 和

File "<ipython-input-151-895039092064>", line 3
    df3.loc[i,value]== True:
                            ^
SyntaxError: invalid syntax 

在第 3 行。

我不确定如何在第 2 行和第 3 行中以正确的方式 loc 列,因为 iterrows() 中的 value 返回一组列+列值而不是单个列名。有更好的方法吗?

【问题讨论】:

标签: python pandas loops


【解决方案1】:

按照@ThePyGuy 的建议使用filter 选择列,并使用any 检查选定列中是否至少有一个值是True:

示例:

>>> df
   action.phishing.A  action.malware.B  action.malware.C  action.malware.D
0              False             False             False              True
1               True             False             False             False
2              False              True             False             False
>>> df.loc[df.filter(like='action.malware').any(axis=1), 'Incident Type'] = 'Malware'

   action.phishing.A  action.malware.B  action.malware.C  action.malware.D Incident Type
0              False             False             False              True       Malware
1               True             False             False             False           NaN
2              False              True             False             False       Malware

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-11
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 2019-08-31
    • 1970-01-01
    • 2011-11-03
    相关资源
    最近更新 更多