我有一个 DataFrame 定义为:
df = pd.DataFrame({
'id':[1,2,3],
'activity':['A1', 'A2', 'A2'],
'prep_hours':[None,None,1],
'delivery_hours':[10,10,15]})
我想创建一个列 total_hours
,它是与模式 *_hours
匹配的所有列的总和
目前,我只是将我想要的列添加到一个新列中:
df.fillna(0, inplace=True)
df['total_hours'] = df['prep_hours'] + df['delivery_hours']
但它不容易扩展。举个例子,我只有 2 个名为 *_hours
的列,但在真正的 DataFrame 中,它包含 30 多个应该添加的列。
有没有更聪明的方法来做到这一点?
最佳答案
使用DataFrame.filter
使用 like
参数和 sum
,不需要将缺失值转换为 0
:
df["total_hours"] = df.filter(like='_hours').sum(axis=1)
print (df)
id activity prep_hours delivery_hours total_hours
0 1 A1 NaN 10 10.0
1 2 A2 NaN 10 10.0
2 3 A2 1.0 15 16.0
关于pandas - 在 DataFrame 中逐行求和给定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60988731/