列的划分,基于其名称

时间:2019-06-25 21:48:34

标签: python pandas

我有一个包含许多列的DataFrame,其中一些具有这样的名称:total_act_qtytotal_act_usd_amt。即具有qtyusd_amt开头相同的部分。
还有另外一列,其名称中包含qtyamt,但没有对应的对。
我想为每对这样的对创建一个新列,并计算除法 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]

感谢您对解决此问题的方法的任何想法

我正在考虑比较这两个列表并获取正确的对,然后使用它来应用函数。.不知道实现它的方法(或者可能有更好的解决方案。

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