熊猫:将组中的值更改为最小值

时间:2017-07-28 01:46:13

标签: python pandas dataframe group-by

我有什么:

@ServiceActivator(inputChannel = "toSftpChannel")
@Order(1)
public String transferComplete(File payload) {
    return "The SFTP transfer complete for file: " + payload;
}

我需要的是按SERIES1和SERIES2进行分组,并将SERIES3中的值转换为该组的最小值。即:

df = pd.DataFrame({'SERIES1':['A','A','A','A','A','A','B','B','B','B','B','B','B','B','C','C','C','C','C'],
                   'SERIES2':[1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1],
                   'SERIES3':[10,12,20,10,12,4,8,8,1,10,12,12,13,13,9,8,7,7,7]})

   SERIES1  SERIES2  SERIES3
0        A        1       10
1        A        1       12
2        A        1       20
3        A        1       10
4        A        2       12
5        A        2        4
6        B        1        8
7        B        1        8
8        B        1        1
9        B        1       10
10       B        1       12
11       B        1       12
12       B        1       13
13       B        1       13
14       C        1        9
15       C        1        8
16       C        1        7
17       C        1        7
18       C        1        7

我觉得可以用.groupby()来完成,但我不确定如何在现有的DataFrame中替换它,或者将其添加为新系列。

我能得到:

df2 = pd.DataFrame({'SERIES1':['A','A','A','A','A','A','B','B','B','B','B','B','B','B','C','C','C','C','C'],
                   'SERIES2':[1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1],
                   'SERIES3':[10,10,10,10,4,4,1,1,1,1,1,1,1,1,7,7,7,7,7]})

   SERIES1  SERIES2  SERIES3
0        A        1       10
1        A        1       10
2        A        1       10
3        A        1       10
4        A        2        4
5        A        2        4
6        B        1        1
7        B        1        1
8        B        1        1
9        B        1        1
10       B        1        1
11       B        1        1
12       B        1        1
13       B        1        1
14       C        1        7
15       C        1        7
16       C        1        7
17       C        1        7
18       C        1        7

这是每组的正确最小值,但我无法找到一种简单的方法将其弹回到原始数据帧中。

1 个答案:

答案 0 :(得分:1)

您可以使用groupby.transform,它会返回一个相同的长度系列,您可以将其分配回数据框:

df['SERIES3'] = df.groupby(['SERIES1', 'SERIES2']).SERIES3.transform('min')
df

enter image description here