[英]Excel formula translation to Python 3
我坚持将以下 excel 公式翻译为 Python 3 代码:
=IF(B1="";A1&D1;A1&VLOOKUP(B1;table_2!table_2_col_A:table_2_col_B;2;FALSE))
我尝试了以下方法,但它不会产生与原始 excel 文件列中相同的结果:
excel_df['new_col)'] = ''
for i, j, k in zip(excel_df['B'],
excel_df['A'],
excel_df['D']):
for v, x in zip(table_2['A'],
table_2['B']):
if not pd.isnull(i):
if i in v:
excel_df.at[i, 'new_col'] = j + x
elif pd.isnull(i):
excel_df.at[i, 'new_col'] = j + k
很抱歉,我无法生成示例数据供您尝试,也无法在此处分享原始数据。 如果您能提供任何指示或更正以更好地将此 excel 公式调整为 python,我将不胜感激。
非常感谢您提前
这可能是您正在寻找的:
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'])
假设您的表格如下所示:
>>> 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
并不完全是理想的解决方案,但它为您提供了一些处理条件的灵活性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.