对每行不同列数的值求和

2024-06-16 10:18:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,包括每个航班不同价格区间的售出机票数量

对于每个记录/行,我希望使用一列中的值作为iloc函数中的索引,以汇总特定数量列中的值

比如,对于每一行,我想将列索引5中的值和['iloc_index']中的值相加

我试过df.iloc[:, 5:df['iloc_index']].sum(axis=1),但没有成功

样本数据:

   A  B  C  D  iloc_value  total
0  1  2  3  2     1
1  1  3  4  2     2
2  4  6  3  2     1

对于每一行,我想根据['iloc_value']中的值汇总列数

比如说,

  • 对于第0行,我希望总数为1+2
  • 对于第1行,我希望总数为1+3+4
  • 对于第2行,我希望总数为4+6

Tags: 数据函数df数量indexvalue记录价格
2条回答

编辑: 我很快就得到了这样的结果:

首先定义一个可以对一行执行此操作的函数:

def sum_till_iloc_value(row):
    return sum(row[:row['iloc_value']+1])
    

然后将其应用于所有行以生成输出:

df_flights['sum'] = df_flights.apply(sum_till_iloc_value, axis=1)
   A  B  C  D  iloc_value  sum
0  1  2  3  2           1    3
1  1  3  4  2           2    8
2  4  6  3  2           1   10

以前: 假设您有如下信息:

df_flights = pd.DataFrame({'flight':['f1', 'f2', 'f3'], 'business':[2,3,4], 'economy':[6,7,8]})
df_flights
    flight  business    economy
0   f1  2   6
1   f2  3   7
2   f3  4   8

您可以将所需列相加,如下所示:

df_flights['seat_count'] = df_flights['business'] + df_flights['economy']

这将创建一个新列,您可以稍后选择:

df_flights[['flight', 'seat_count']]

 flight seat_count
0   f1  8
1   f2  10
2   f3  12

以下是一种完全矢量化的方法:融合数据帧,仅对相关列求和,并将总数返回到数据帧中:

d = dict([[y, x] for x, y in enumerate(df.columns[:-1])])

temp_df = df.copy()
temp_df = temp_df.rename(columns=d)
temp_df = temp_df.reset_index().melt(id_vars = ["index", "iloc_value"])
temp_df = temp_df[temp_df.variable <= temp_df.iloc_value]
df["total"] = temp_df.groupby("index").value.sum()

输出为:

   A  B  C  D  iloc_value  total
0  1  2  3  2           1      3
1  1  3  4  2           2      8
2  4  6  3  2           1     10

相关问题 更多 >