gpt4 book ai didi

python - 如何在 Pandas 数据框中找到最大值并为其分配新值?

转载 作者:太空宇宙 更新时间:2023-11-04 09:52:26 25 4
gpt4 key购买 nike

这是我的 Pandas 数据框 Pandas 数据框

ID          Position   Time(in Hours) Date
01 18 2 01/01/2016
01 21 4 01/10/2016
01 19 2 01/10/2016
05 19 5 01/10/2016
05 21 1 01/10/2016
05 19 8 01/10/2016
02 19 18 02/10/2016
02 35 11 02/10/2016

我需要为每个 ID 和日期的最大时间分配“1”,否则分配“0”。我的代码是

def find_max(db7):
max_row = db7['Time'].max()
labels = np.where((db7['Time_in_Second'] == max_row),'1','0')
return max_row

db7['Max'] = db7['Time'].map(find_max)

但是我遇到了以下错误。请问我该怎么做?

TypeError: 'float' object is not subscriptable

我的预期输出应该是:

ID          Position   Time(in Hours) Date        Max
01 18 2 01/01/2016 0
01 21 4 01/10/2016 1
01 19 2 01/10/2016 0
05 19 5 01/10/2016 0
05 21 1 01/10/2016 0
05 19 8 01/10/2016 1
02 19 18 02/10/2016 1
02 35 11 02/10/2016 0

最佳答案

使用groupbytransform maxnumpy.where用于分配新值:

max1 = db7.groupby(['ID','Date'])['Time(in Hours)'].transform('max')
db7['Max'] = np.where(db7['Time(in Hours)'].eq(max1), '1', '0')
print (db7)
ID Position Time(in Hours) Date Max
0 1 18 2 01/01/2016 1
1 1 21 4 01/10/2016 1
2 1 19 2 01/10/2016 0
3 5 19 5 01/10/2016 0
4 5 21 1 01/10/2016 0
5 5 19 8 01/10/2016 1
6 2 19 18 02/10/2016 1
7 2 35 11 02/10/2016 0

或者将TrueFalse通过double 转换为'1''0' >astype:

max1 = db7.groupby(['ID','Date'])['Time(in Hours)'].transform('max')
db7['Max'] = db7['Time(in Hours)'].eq(max1).astype(int).astype(str)
print (db7)
ID Position Time(in Hours) Date Max
0 1 18 2 01/01/2016 1
1 1 21 4 01/10/2016 1
2 1 19 2 01/10/2016 0
3 5 19 5 01/10/2016 0
4 5 21 1 01/10/2016 0
5 5 19 8 01/10/2016 1
6 2 19 18 02/10/2016 1
7 2 35 11 02/10/2016 0

详细信息:

print (max1)
0 2
1 4
2 4
3 8
4 8
5 8
6 18
7 18
Name: Time(in Hours), dtype: int64

#eq is same as ==
print (db7['Time(in Hours)'].eq(max1))
0 True
1 True
2 False
3 False
4 False
5 True
6 True
7 False
Name: Time(in Hours), dtype: bool

编辑:

如果只按ID列分组:

max1 = db7.groupby('ID')['Time(in Hours)'].transform('max')
db7['Max'] = np.where(db7['Time(in Hours)'].eq(max1), '1', '0')
print (db7)
ID Position Time(in Hours) Date Max
0 1 18 2 01/01/2016 0
1 1 21 4 01/10/2016 1
2 1 19 2 01/10/2016 0
3 5 19 5 01/10/2016 0
4 5 21 1 01/10/2016 0
5 5 19 8 01/10/2016 1
6 2 19 18 02/10/2016 1
7 2 35 11 02/10/2016 0

print (max1)
0 4
1 4
2 4
3 8
4 8
5 8
6 18
7 18
Name: Time(in Hours), dtype: int64

关于python - 如何在 Pandas 数据框中找到最大值并为其分配新值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47250702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com