我有以下
# df1, df2, final_df have same index
final_df = ...
df1 = ...
df2 = ...
sum_cols = ['a', 'b', 'c']
final_df[sum_cols] = df1[sum_cols] df2[sum_cols]
現在我想對任意數量的 dfs 執行此操作
final_df = ...
dfs = [df1, df2, df3, ...] # they all have same index
final_df[sum_cols] = df1[sum_cols] df2[sum_cols] df3[sum_cols] ...
在沒有 for 回圈的情況下,我如何很好地做到這一點?
uj5u.com熱心網友回復:
您可以使用 reduce(或者您可以使用 for 回圈)。
import functools
import operator
sum_cols = ['a', 'b', 'c']
dataframes = [...] # list of dataframes
final_df[sum_cols] = functools.reduce(operator.add, [d[sum_cols] for d in dataframes])
Reduce 的優勢sum()在于它不使用初始值(0默認情況下為 sum)。
僅使用回圈也可能沒問題,而且寫起來很短。并且高效,我們不會創建不必要的其他物件或中間體。
final_df[sum_cols] = dataframes[0][sum_cols]
for d in dataframes[1:]:
final_df[sum_cols] = d[sum_cols]
您甚至可以嘗試僅在 Pandas 操作中執行此操作。但我不會推薦這個。此時我們只是通過復制資料來浪費時間:
final_df[sum_cols] = pd.concat([d[sum_cols] for d in dataframes], axis=1, keys=range(len(dataframes))).sum(level=1, axis=1)
pd.concat有一個選項,copy=False但實際上在大多數情況下它不會保存復制。
提供了替代方案,以便更容易滿足......其中之一,也許只是一個回圈?:)
uj5u.com熱心網友回復:
您可以使用該sum()功能
final_df[sum_cols] = sum(dfs)
如果 dfs 都是數字
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/347390.html
