python 中未硬编码的条件

Conditions in python that are not hard-coded

我正在尝试寻找一种方法来表示 np.where() 的条件,而不是在代码中。在我下面的示例中,

import pandas as pd
import numpy as np

file='insert path'
df = pd.read_csv(file)
df.loc[:, ['col_a','col_b']] = df.loc[:, ['col_a','col_b']].astype(str)
dfseg=df['col_a']+'-'+df['col_b']+'-'+df['col_c']

df['col_d'] = np.where((df['col_a']=='101')|(df['col_a']=='337')|(df['col_a']=='524'),dfseg,df['col_a'])

df

条件是

一个。 df['col_a']=='101' 或

b。 df['col_a']=='337' 或

c。 df['col_a']=='524'

有什么方法可以在代码外部表示这些条件?还是通过另一个pythonmethod/function? tkinter 可以提取这部分代码并编辑这些条件吗?希望找到一种方法可以在外部而不是在脚本中审查和管理这些条件等。

我已经尝试了 np.isin()np.in1d 但收到了错误的结果:

print(np.in1d(df1['col_a'],df2['col_a']))
print(np.isin(df1['col_a'],df2['col_a']))

输出:

[False False False False False False]
[False False False False False False]

来自以下内容:

df2: 
    col_a
0    101
1    524
2    337 
 df1: 
   col_a col_b col_c
0   101   104   AAB
1   337   103   CAD
2   524   204   DER
3   129   404   EEH
4   842   108   HHR
5   337   108   HHE 
 df2[col_a].isin df1[col_a] 
 0    False
1    False
2    False
3    False
4    False
5    False
Name: col_a, dtype: bool 
 df1[col_a].isin df2[col_a] 
 0    True
1    True
2    True
Name: col_a, dtype: bool

使用

将 df 转换为 numpy
df1numpy = df1.to_numpy()

类似地产生了与 np.isin() 的所有“错误”匹配。谢谢你的想法。

原来df转numpy后,数组也需要转置:

df1numpy1stcol = np.transpose(df1numpy)[0]

(df2不需要转成numpy,下面更新)

然后,从对象更改数据类型:

df1numpy1stcol.astype(np.int32)

最后,np.where() 可以与 np.isin() 一起使用:

df1['col_d'] = np.where(np.isin(df1numpy1stcol.astype(np.int32),df2),
                       dfseg,df1['col_a'])

因此,df1 [输出]为:

col_a col_b col_c col_d
0 101 104 AAB 101-104-AAB
1 337 103 CAD 337-103-CAD
2 524 204 DER 524-204-DER
3 129 404 EEH 129
4 842 108 HHR 842
5 337 108 HHE 337-108-HHE

例外列表现在表示为名为“df2”的可编辑列表。