【问题标题】:Sum up value in different numbers of columns for each row将每行不同列数的值相加
【发布时间】:2020-07-04 23:16:39
【问题描述】:

我有一个数据框,其中包括每个航班在不同价格范围内售出的机票数量。

对于每条记录/行,我想将一列中的值用作 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

【问题讨论】:

  • 欢迎来到 SO。请在您的问题中包含示例数据和预期输出作为文本,并阅读stackoverflow.com/questions/20109391/…
  • 对于 row1,如何从该行中的值得到 1+2+3?不应该是1+3+4吗?
  • 对不起,我刚刚更正了。感谢您的通知

标签: python pandas dataframe


【解决方案1】:

编辑: 我通过这种方式很快得到了结果:

先定义一个函数,可以做一行:

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

【讨论】:

  • 感谢您的快速回复。但我想根据列中的值总结每行不同列数中的值。我添加了示例数据
  • 我刚刚根据您提供的数据更新了答案,希望对您有所帮助!
【解决方案2】:

这是一种完全矢量化的方法:融合数据框,仅对相关列求和,然后将总数返回数据框:

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

【讨论】:

  • 这回答了你的问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
相关资源
最近更新 更多