如何根据另一列和一个键设置数据框中新列的值?

时间:2017-05-30 14:18:54

标签: python pandas dataframe

我有一个数据集如下,其中包含每场比赛的玩家属性。数据集采用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     

2 个答案:

答案 0 :(得分:0)

您可以使用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)))

答案 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