如何在dataframe中基于另一列和键设置新列的值?

2024-10-04 05:33:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下的数据集,包括每一场比赛的球员属性。数据集采用数据帧格式,并按每个字符的日期降序排序。你知道吗

characterId  date               kills deaths matchResult   
200          3-5-2014-22:30:10  10      12     0
300          4-4-2014-23:30:10  10      13     1
400          1-2-2014-17:30:10  9       10     1
201          3-5-2014-22:20:05  11      16     0
301          1-4-2014-20:20:05  18      15     1

我想添加一个新列(nextResult),其中包含最后一个匹配项的值matchResult。新的数据帧应如下所示:

characterId  date               kills deaths matchResult   nextResult
200          3-5-2014-22:30:10  10      12     0             nan
300          4-4-2014-23:30:10  10      13     1             0
400          1-2-2014-17:30:10  9       10     1             1 
201          3-5-2014-22:20:05  11      16     0             nan 
301          1-4-2014-20:20:05  18      15     1             0     

Tags: 数据date属性排序格式nan字符球员
2条回答

您可以使用shiftwhere检查characterId是否已重新启动。你知道吗

 df['nextResult'] = df.shift(1)['matchResult'].where(df.characterid.diff().fillna(0).ge(0))

输出:

   characterid               date  kills  deaths  matchResult  nextResult
0          200  3-5-2014-22:30:10     10      12            0         NaN
1          300  4-4-2014-23:30:10     10      13            1         0.0
2          400  1-2-2014-17:30:10      9      10            1         1.0
3          201  3-5-2014-22:20:05     11      16            0         NaN
4          301  1-4-2014-20:20:05     18      15            1         0.0

df['nextResult'] = df.shift(1)['matchResult'].where(df.characterid.gt(df.shift(1).fillna('').characterid.astype(str)))

只需像访问字典一样访问数据帧:

import numpy as np # for np.NaN (or use NaN = float('nan'))
df = pd.DataFrame({ ... }) # your dataframe possibly from a CSV
df['nextResult'] = [np.NaN, 0, 1, np.NaN, 0]

有关熊猫的介绍,请参见https://pandas.pydata.org/pandas-docs/stable/10min.html

相关问题 更多 >