首页 > 解决方案 > Python Pandas 根据条件添加 Max 列

问题描述

这是我的表 1

Time       A    B   C   D

1:00:00     1   5   4   3
2:00:00     2   9   5   2
3:00:00     3   3   3   1
4:00:00     4   1   9   3
5:00:00     5   3   3   5
6:00:00     6   4   4   4
7:00:00     7   6   5   8
8:00:00     8   7   6   6

以及如何按以下方式添加 Max 列!

Time       A    B   C   D   A Max    B Max  C Max   D Max

1:00:00     1   5   4   3               
2:00:00     2   9   5   2             9     
3:00:00     3   3   3   1               
4:00:00     4   1   9   3                     9 
5:00:00     5   3   3   5               
6:00:00     6   4   4   4               
7:00:00     7   6   5   8                             8
8:00:00     8   7   6   6     8         

这是我的简单代码。

df = pd.DataFrame(data=df, columns=['A','B','C','D'])
max = df.groupby(['Datetime']).agg(A_Max=pd.NamedAgg(column='A', aggfunc='max'))

标签: pythonpandas

解决方案


你可以试试:

s = df.iloc[:, 1:]

df.join(s.where(s.eq(s.max())).add_suffix(' Max')) 

输出:

      Time  A  B  C  D  A Max  B Max  C Max  D Max
0  1:00:00  1  5  4  3    NaN    NaN    NaN    NaN
1  2:00:00  2  9  5  2    NaN    9.0    NaN    NaN
2  3:00:00  3  3  3  1    NaN    NaN    NaN    NaN
3  4:00:00  4  1  9  3    NaN    NaN    9.0    NaN
4  5:00:00  5  3  3  5    NaN    NaN    NaN    NaN
5  6:00:00  6  4  4  4    NaN    NaN    NaN    NaN
6  7:00:00  7  6  5  8    NaN    NaN    NaN    8.0
7  8:00:00  8  7  6  6    8.0    NaN    NaN    NaN

更新:对于最小值和最大值:

df.join(s.where(s.eq(s.max())|s.eq(s.min())).add_suffix(' MaxMin')) 

输出:

      Time  A  B  C  D  A MaxMin  B MaxMin  C MaxMin  D MaxMin
0  1:00:00  1  5  4  3       1.0       NaN       NaN       NaN
1  2:00:00  2  9  5  2       NaN       9.0       NaN       NaN
2  3:00:00  3  3  3  1       NaN       NaN       3.0       1.0
3  4:00:00  4  1  9  3       NaN       1.0       9.0       NaN
4  5:00:00  5  3  3  5       NaN       NaN       3.0       NaN
5  6:00:00  6  4  4  4       NaN       NaN       NaN       NaN
6  7:00:00  7  6  5  8       NaN       NaN       NaN       8.0
7  8:00:00  8  7  6  6       8.0       NaN       NaN       NaN

推荐阅读