2 回答
TA贡献1719条经验 获得超6个赞
这可能是您正在寻找的:
tbl2 = table_2[['col_A','col_B']]
## df has columns A,B,D
df = df.merge(tbl2,left_on=['B'],right_on=['col_A'],how='left')
# df['col_B'] = df['col_B'].fillna(0)
df['result'] = np.where(df['B']=='',df['A']*df['D'],df['A']*df['col_B'])
TA贡献1818条经验 获得超8个赞
假设您的表格如下所示:
>>> df
A B C D
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 NaN C3 D3
4 A4 B4 C4 D4
5 A5 B5 C5 D5
6 A6 NaN C6 D6
7 A7 NaN C7 D7
8 A8 NaN C8 D8
9 A9 NaN C9 D9
>>> table_2
A B
0 B20 x20
1 B19 x19
2 B18 x18
3 B17 x17
4 B16 x16
5 B15 x15
6 B14 x14
7 B13 x13
8 B12 x12
9 B11 x11
10 B10 x10
11 B9 x9
12 B8 x8
13 B7 x7
14 B6 x6
15 B5 x5
16 B4 x4
17 B3 x3
18 B2 x2
19 B1 x1
这是一种方法:
# Prepare table_2 into a "look up" table of sort
>>> table_2 = table_2.set_index('A')
# Formula translation
>>> df = df.assign(result=df.apply(lambda x: (x['A'] + x['D']) if pd.isna(x['B']) else table_2['B'].get(x['B']), axis=1))
结果:
>>> df
A B C D result
0 A0 B0 C0 D0 None
1 A1 B1 C1 D1 x1
2 A2 B2 C2 D2 x2
3 A3 NaN C3 D3 A3D3
4 A4 B4 C4 D4 x4
5 A5 B5 C5 D5 x5
6 A6 NaN C6 D6 A6D6
7 A7 NaN C7 D7 A7D7
8 A8 NaN C8 D8 A8D8
9 A9 NaN C9 D9 A9D9
使用apply并不是完全理想的解决方案,但它为您提供了一些处理条件的灵活性。
添加回答
举报