gpt4 book ai didi

python - 使用列条件处理数据框的子集

转载 作者:行者123 更新时间:2023-12-04 10:44:41 25 4
gpt4 key购买 nike

来自数据帧 df我想更新列的值 Points对于另一列的前 3 个值 Time排序后 Time列按升序排列,这样
df['Points'] = df['Points'] * 1.3第一行(最小 Time)
df['Points'] = df['Points'] * 1.2对于第二行(第二小 Time)
df['Points'] = df['Points'] * 1.1对于第三行(第三小 Time)四舍五入到最接近的整数。

Points对于所有其他行保持不变。

我必须为第三列值的每个唯一值执行此操作 Challenge .我怎样才能做到这一点?

所以,我需要 PointsA而不是 Points从下面 -

Challenge      Team              Time              Points   PointsA 
A 1 2019-11-05 23:00:43.07589 200 260
B 3 2019-11-05 22:10:55.07589 100 130
A 5 2019-11-05 23:05:43.07589 200 240
A 7 2019-11-05 23:07:33.07589 200 220
B 10 2019-11-05 22:20:13.07589 100 120
C 4 2019-11-06 00:05:22.07589 50 65
A 4 2019-11-05 23:18:23.07589 200 200

我试过类似的东西 -
for challenge in df['Challenge'].unique():
df[df['Challenge'] == challenge].sort_values('Time', ascending=True).head(1)['Points'] *= 1.3

但这似乎不起作用。

最佳答案

尝试这个。使用 value_countsitems得到每个 challenge以及它们的长度。使用这些长度来缩小挑战的分配范围

val = [1.3, 1.2, 1.1]
df.Time = pd.to_datetime(df.Time)
for challenge, i in df['Challenge'].value_counts().items():
df.loc[df[df['Challenge'] == challenge].nsmallest(3, 'Time').index, 'Points'] *= val[:i]

Out[201]:
Challenge Team Time Points PointsA
0 A 1 2019-11-05 23:00:43.075890 260.0 260
1 B 3 2019-11-05 22:10:55.075890 130.0 130
2 A 5 2019-11-05 23:05:43.075890 240.0 240
3 A 7 2019-11-05 23:07:33.075890 220.0 220
4 B 10 2019-11-05 22:20:13.075890 120.0 120
5 C 4 2019-11-06 00:05:22.075890 65.0 65
6 A 4 2019-11-05 23:18:23.075890 200.0 200

Challenge = 'C'有一行,它是从 50 正确计算出来的至 65

关于python - 使用列条件处理数据框的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59763224/

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