pandas 为列中唯一值的第一个示例创建包含小计的新列,否则为0

ovfsdjhp  于 2024-01-04  发布在  其他
关注(0)|答案(2)|浏览(72)

我有一个数据集,如下所示:

ClientID        Date  Total sales  Cumulative Sales
0        A  01-01-2000          100               300
1        A  01-02-2000          100                 0
2        A  01-03-2000          100                 0
3        B  01-01-2000           50               100
4        B  01-02-2000           50                 0
5        C  01-01-2000           70               210
6        C  01-02-2000           70                 0
7        C  01-03-2000           70                 0
8        D  01-01-2000           20                40
9        D  01-02-2000           20                 0

字符串
我想找出一种方法来创建Cumulative Sales列,这将是每个唯一ClientID的第一行的Total sales和其余的0的总和。
我在excel中找到了解决方案,创建了一个新的列R来计算第一个不同的值,然后使用IF(SUMIF)函数计算总和:

=IF(COUNTIFS($F$2:$F8, $F8)=1, SUMIF($F$2:$F$1065, R8, $P$2:$P$1065), "0")

suzh9iv8

suzh9iv81#

对于Series.duplicated的重复值和GroupBy.transform的第一个值集sum,使用numpy.where和set 0 by mask:

df['Cumulative Sales'] = np.where(df['ClientID'].duplicated(), 
                                  0, 
                                  df.groupby('ClientID')['Total sales'].transform('sum'))
print (df)
  ClientID        Date  Total sales  Cumulative Sales
0        A  01-01-2000          100               300
1        A  01-02-2000          100                 0
2        A  01-03-2000          100                 0
3        B  01-01-2000           50               100
4        B  01-02-2000           50                 0
5        C  01-01-2000           70               210
6        C  01-02-2000           70                 0
7        C  01-03-2000           70                 0
8        D  01-01-2000           20                40
9        D  01-02-2000           20                 0

字符串

sdnqo3pr

sdnqo3pr2#

使用groupby.transformmask作为基于duplicated ID的非第一个值:

df['Cumulative Sales'] = (df.groupby('Client ID')['Total sales'].transform('sum')
                            .mask(df['Client ID'].duplicated(), 0)
                         )

字符串
输出量:

Client ID        Date  Total sales  Cumulative Sales
0         A  01-01-2000          100               300
1         A  01-02-2000          100                 0
2         A  01-03-2000          100                 0
3         B  01-01-2000           50               100
4         B  01-02-2000           50                 0
5         C  01-01-2000           70               210
6         C  01-02-2000           70                 0
7         C  01-03-2000           70                 0
8         D  01-01-2000           20                40
9         D  01-02-2000           20                 0

相关问题