按列分组并找到每组的最小值和最大值
Groupby column and find min and max of each group
我有以下数据集,
Day Element Data_Value
6786 01-01 TMAX 112
9333 01-01 TMAX 101
9330 01-01 TMIN 60
11049 01-01 TMIN 0
6834 01-01 TMIN 25
11862 01-01 TMAX 113
1781 01-01 TMAX 115
11042 01-01 TMAX 105
1110 01-01 TMAX 111
651 01-01 TMIN 44
11350 01-01 TMIN 83
1798 01-02 TMAX 70
4975 01-02 TMAX 79
12774 01-02 TMIN 0
3977 01-02 TMIN 60
2485 01-02 TMAX 73
4888 01-02 TMIN 31
11836 01-02 TMIN 26
11368 01-02 TMAX 71
2483 01-02 TMIN 26
我想按天分组,然后找到 TMIN 的整体最小值和 TMAX 的最大值并将它们放入数据框中,所以我得到如下输出...
Day DayMin DayMax
01-01 0 115
01-02 0 79
我知道我需要做的,
df.groupby(by='Day')
但我无法进行下一步 - 是否应该创建列来存储 TMAX 和 TMIN 值?
使用
In [5265]: def maxmin(x):
...: mx = x[x.Element == 'TMAX'].Data_Value.max()
...: mn = x[x.Element == 'TMIN'].Data_Value.min()
...: return pd.Series({'DayMin': mn, 'DayMax': mx})
...:
In [5266]: df.groupby('Day').apply(maxmin)
Out[5266]:
DayMax DayMin
Day
01-01 115 0
01-02 79 0
此外,
In [5268]: df.groupby('Day').apply(maxmin).reset_index()
Out[5268]:
Day DayMax DayMin
0 01-01 115 0
1 01-02 79 0
或者,使用 query
而不是 x[x.Element == 'TMAX']
作为 x.query("Element == 'TMAX'")
创建重复列并使用 agg 查找最小值和最大值,即
ndf = df.assign(DayMin = df['Data_Value'].abs(),DayMax=df['Data_Value'].abs()).groupby('Day')\
.agg({'DayMin':'min','DayMax':'max'})
DayMax DayMin
Day
01-01 115 0
01-02 79 0
如果您同时需要 TMIN 和 TMAX,那么 groupby(['Day','Element'])
您可以使用 assign
+ abs
,然后是 groupby
+ agg
:
df = (df.assign(Data_Value=df['Data_Value'].abs())
.groupby(['Day'])['Data_Value'].agg([('Min' , 'min'), ('Max', 'max')])
.add_prefix('Day'))
df
DayMin DayMax
Day
01-01 0 115
01-02 0 79
我有以下数据集,
Day Element Data_Value
6786 01-01 TMAX 112
9333 01-01 TMAX 101
9330 01-01 TMIN 60
11049 01-01 TMIN 0
6834 01-01 TMIN 25
11862 01-01 TMAX 113
1781 01-01 TMAX 115
11042 01-01 TMAX 105
1110 01-01 TMAX 111
651 01-01 TMIN 44
11350 01-01 TMIN 83
1798 01-02 TMAX 70
4975 01-02 TMAX 79
12774 01-02 TMIN 0
3977 01-02 TMIN 60
2485 01-02 TMAX 73
4888 01-02 TMIN 31
11836 01-02 TMIN 26
11368 01-02 TMAX 71
2483 01-02 TMIN 26
我想按天分组,然后找到 TMIN 的整体最小值和 TMAX 的最大值并将它们放入数据框中,所以我得到如下输出...
Day DayMin DayMax
01-01 0 115
01-02 0 79
我知道我需要做的,
df.groupby(by='Day')
但我无法进行下一步 - 是否应该创建列来存储 TMAX 和 TMIN 值?
使用
In [5265]: def maxmin(x):
...: mx = x[x.Element == 'TMAX'].Data_Value.max()
...: mn = x[x.Element == 'TMIN'].Data_Value.min()
...: return pd.Series({'DayMin': mn, 'DayMax': mx})
...:
In [5266]: df.groupby('Day').apply(maxmin)
Out[5266]:
DayMax DayMin
Day
01-01 115 0
01-02 79 0
此外,
In [5268]: df.groupby('Day').apply(maxmin).reset_index()
Out[5268]:
Day DayMax DayMin
0 01-01 115 0
1 01-02 79 0
或者,使用 query
而不是 x[x.Element == 'TMAX']
作为 x.query("Element == 'TMAX'")
创建重复列并使用 agg 查找最小值和最大值,即
ndf = df.assign(DayMin = df['Data_Value'].abs(),DayMax=df['Data_Value'].abs()).groupby('Day')\
.agg({'DayMin':'min','DayMax':'max'})
DayMax DayMin Day 01-01 115 0 01-02 79 0
如果您同时需要 TMIN 和 TMAX,那么 groupby(['Day','Element'])
您可以使用 assign
+ abs
,然后是 groupby
+ agg
:
df = (df.assign(Data_Value=df['Data_Value'].abs())
.groupby(['Day'])['Data_Value'].agg([('Min' , 'min'), ('Max', 'max')])
.add_prefix('Day'))
df
DayMin DayMax
Day
01-01 0 115
01-02 0 79