python - 如何确定 N 个 bool Pandas 列的逻辑真值?

标签 python pandas

我有一个对表执行分析并添加额外功能以对该行数据进行分类的管道。在这个玩具箱中,我有一个带有特征 [id, x, y, z] 的表格,我正在添加 has_adj。我不知道如何确定 N 列的逻辑真值(即调整搜索中的列数可以是 N):

    id   x     y     z     n   has_adj_0  has_adj_1  has_adj_n
0   AX1  10.0  Adj   <NA>  ..  True       False      ...
1   V0D  3.5   <NA>  <NA>  ..  False      False      ...
2   G7L  8.0   <NA>  Adj   ..  False      True       ...

最后,我设置特征 df['has_adj'] = True 其中行包含 any True 值,否则错误

这是生成上表的玩具示例:

import pandas as pd
import re

def hf_txn_has_adj(text, regex_dict):
    if pd.isna(text):
        return False

    rx = re.compile(regex_dict['regex_value'])
    result = rx.match(text)
    if rx.match(text):
        return True
    else:
        return False

regex_dict = {'regex_value': '(Adj)'}
df = pd.DataFrame([['AX1', 10, 'Adj', pd.NA], 
                   ['V0D', 3.5, pd.NA, pd.NA], 
                   ['G7L', 8, pd.NA, 'Adj']], 
                  columns=['id', 'x', 'y', 'z'])

for i, adj_feat in enumerate(['y', 'z']):
    df['has_adj_' + str(i)] = df[adj_feat].apply(hf_txn_has_adj, regex_dict=regex_dict)

最佳答案

尝试 filter + any在轴上=1:

df['has_adj'] = df.filter(like='has_adj_').any(axis=1)

print(df)

df:

    id     x     y     z  has_adj_0  has_adj_1  has_adj
0  AX1  10.0   Adj  <NA>       True      False     True
1  V0D   3.5  <NA>  <NA>      False      False    False
2  G7L   8.0  <NA>   Adj      False       True     True

关于python - 如何确定 N 个 bool Pandas 列的逻辑真值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67654174/

相关文章:

python - 获取描述符对象的好方法

python - Dataframe 列有数字,其中许多为 str 格式,许多为 float,如何将它们全部转换为 float

Python 迭代行和匹配值

python - 如何迭代数据框列表并在未找到特定字符串时删除所有数据

python - 组织多个数据框的最佳方式

python - 如何从开始时间中减去每次

python : terminology 'class' VS 'type'

python - Leetcode 删除数组中某个值的实例的问题

python - 将具有多个时区的 pandas 列转换为单个时区

python - 我无法使用使用 pandas Dataframes 作为参数的生成器创建 Dataset.from_generator()