跨数据帧列应用“或”条件

2024-06-06 16:36:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我想检查在任何dataframe行上,给定数量的列是否有一组值(不同的列有不同的值集),并相应地分配一个boolean-我想我可能需要一个apply()any()的组合,但不能完全准确地命中它:

因此,对于数据帧:

bank_dict = {'Name' : ['A', 'B', 'C', 'D', 'E'],
        'Type' :     ['Retail', 'Corporate', 'Corporate', 'Wholesale', 'Retail'],
        'Overdraft': ['Y', 'Y', 'Y', 'N', 'N'],
        'Forex': ['USD', 'GBP', 'EUR', 'JPY', 'GBP']}

真相清单:

truth_list = [bank_df['Type'].isin(['Retail']), bank_df['Overdraft'].isin(['Yes']), bank_df['Forex'].isin(['USD', 'GBP'])]

结果df应如下所示:

  Name       Type Overdraft Forex  TruthCol
0    A     Retail         Y   USD         1
1    B  Corporate         Y   GBP         1
2    C  Corporate         Y   EUR         1
3    D  Wholesale         N   JPY         0
4    E     Retail         N   GBP         1

谢谢你


Tags: namedataframedftypecorporateeurbankusd
2条回答

我认为需要^{}

bank_df['TruthCol'] = np.logical_or.reduce(truth_list).astype(int)
print (bank_df)
  Name       Type Overdraft Forex  TruthCol
0    A     Retail         Y   USD         1
1    B  Corporate         Y   GBP         1
2    C  Corporate         Y   EUR         1
3    D  Wholesale         N   JPY         0
4    E     Retail         N   GBP         1

另一种方法是将条件放入numpy.where

bank_df['TruthCol'] = np.where(((bank_df['Type'] == 'Retail') | (bank_df['Overdraft'] == 'Y') | ((bank_df['Forex'] == 'USD') | (bank_df['Forex'] == 'GBP'))), 1, 0)

输出:

  Forex Name Overdraft       Type  TruthCol
0   USD    A         Y     Retail         1
1   GBP    B         Y  Corporate         1
2   EUR    C         Y  Corporate         1
3   JPY    D         N  Wholesale         0
4   GBP    E         N     Retail         1

相关问题 更多 >