我有一个包含许多列的DataFrame,其中一些具有这样的名称:total_act_qty
,total_act_usd_amt
。即具有qty
和usd_amt
开头相同的部分。
还有另外一列,其名称中包含qty
和amt
,但没有对应的对。
我想为每对这样的对创建一个新列,并计算除法 amt / qty
以下是DF的示例:
pd.DataFrame({'total_act_qty':range(1,5),
'total_act_usd_amt':range(3,7),
'total_1y_act_usd_amt':range(11,15),
'total_1y_act_qty':[np.nan, 1, 2, 3],
'cc_tmp_qty':range(0,8,2),
'new_col':['a', 'b', 'c', np.nan]
})
我从获取所需列的列表开始,然后陷入困境
lst = train.columns
lst_qty = [i for i in lst if i.find('qty')>-1]
lst_amt = [i for i in lst if i.find('usd_amt')>-1]
感谢您对解决此问题的方法的任何想法
我正在考虑比较这两个列表并获取正确的对,然后使用它来应用函数。.不知道实现它的方法(或者可能有更好的解决方案。
答案 0 :(得分:1)
我将使用list
理解来获取前缀,该前缀生成以'usd_amt'
和'qty'
结尾的列,然后使用assign
创建一个新的数据框:>
qty_cols = (col.replace('_qty', '') for col in df.columns if col.endswith('qty'))
use_cols = [col for col in qty_cols if f'{col}_usd_amt' in df.columns]
result = df.assign(**{f'{col}_result': df[f'{col}_usd_amt'] / df[f'{col}_qty'] for col in use_cols})
print(result)
输出:
total_act_qty total_act_usd_amt total_1y_act_usd_amt total_1y_act_qty \
0 1 3 11 NaN
1 2 4 12 1.0
2 3 5 13 2.0
3 4 6 14 3.0
cc_tmp_qty new_col total_act_result total_1y_act_result
0 0 a 3.000000 NaN
1 2 b 2.000000 12.000000
2 4 c 1.666667 6.500000
3 6 NaN 1.500000 4.666667