【发布时间】:2021-11-22 09:10:37
【问题描述】:
我有一个包含 ID、值、A、B、C 列的 df。我想检查一个字符串,比如“Type AB”,是否在 A、B、C 列的任何行中。如果它存在,我想在新列“TypeAB_present”中为该行标记它“存在” .我如何在 python 中实现这一点?
【问题讨论】:
标签: python python-3.x pandas dataframe data-manipulation
我有一个包含 ID、值、A、B、C 列的 df。我想检查一个字符串,比如“Type AB”,是否在 A、B、C 列的任何行中。如果它存在,我想在新列“TypeAB_present”中为该行标记它“存在” .我如何在 python 中实现这一点?
【问题讨论】:
标签: python python-3.x pandas dataframe data-manipulation
试试np.where 和any
df['TypeAB _present'] = np.where(df[['A', 'B', 'C']].eq('Type AB').any(axis = 1 ), 'Present', '')
【讨论】:
假设您使用的是 pandas,并且您正在从任何列中查找确切的“Type AB”标签。
df['TypeAB_present'] = df[['A', 'B', 'C']].apply(lambda row: 'Present' if 'Type AB' in row.values else '', axis=1)
【讨论】:
你可以试试这个:
import pandas as pd
df = pd.DataFrame(
{
'ID': ['AB01', 'AB02', 'AB02', 'AB01', 'AB01'],
'Values': [57, 98, 87, 69, 98],
'A': ['Type A', 'Type B', 'Type B', 'Type B', 'Type AB'],
'B': [None, 'Type AB', None, 'Type A', None]
}
)
df.loc[(df[['A', 'B']] == 'Type AB').any(axis=1), 'C'] = 'Present'
df
出来
ID Values A B C
0 AB01 57 Type A None NaN
1 AB02 98 Type B Type AB Present
2 AB02 87 Type B None NaN
3 AB01 69 Type B Type A NaN
4 AB01 98 Type AB None Present
如果您的检查比完全相等匹配稍微复杂一些,您可以为索引创建更强大的掩码。在这里,我正在检查 A 或 B 列中的任何字符串是否包含子字符串 'AB':
match_mask = df[['A', 'B']].apply(lambda x: x.str.contains('AB')).any(axis=1)
df.loc[match_mask, 'C'] = 'Present'
【讨论】: