【问题标题】:How to get the aggregate result only on the first occurrence, and 0 to the other, in a computation with groupby and transform?在使用 groupby 和 transform 的计算中,如何仅在第一次出现时获得聚合结果,而在另一次出现时获得 0?
【发布时间】:2019-08-08 08:22:36
【问题描述】:

我想对数据帧进行分组和求和,而不修改索引的数量,但仅将操作应用于第一次出现。

初始 DF:

C1 | Val
a  | 1
a  | 1
b  | 1
c  | 1
c  | 1

想要的后卫:

C1 | Val
a  | 2
a  | 0
b  | 1
c  | 2
c  | 0

我尝试应用以下代码:

df.groupby(['C1'])['Val'].transform('sum')

这有助于将聚合结果传播到总数或行数。但是,transform 似乎没有允许将结果仅应用于第一次或最后一次出现的参数。

确实,我目前得到的是:

C1 | Val
a  | 2
a  | 2
b  | 1
c  | 2
c  | 2

【问题讨论】:

    标签: python dataframe transform


    【解决方案1】:

    使用pandas.DataFrame.groupby:

    s = df.groupby('C1')['Val']
    v = s.sum().values
    df.loc[:, 'Val'] = 0
    df.loc[s.head(1).index, 'Val'] = v
    print(df)
    

    输出:

      C1  Val
    0  a    2
    1  a    0
    2  b    1
    3  c    2
    4  c    0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      • 1970-01-01
      相关资源
      最近更新 更多