我有一个数据集如下,其中包含每场比赛的玩家属性。数据集采用Pandas Dataframe格式,并按降序排列每个characterId的日期。
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
答案 0 :(得分:0)
您可以使用shift
和where
来检查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)))
答案 1 :(得分:0)
只需访问数据框就像是字典一样:
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