使用shift查找列行之间的差异

时间:2017-09-10 04:32:25

标签: python pandas dataframe difference

我已经来这里差不多两年了,而且一直都能解决问题,但我现在很难过。希望这是一个快速的答案。

https://github.com/MPhillips55/Capstone-Project-2---League-of-Legends/blob/master/EDA/test_case.csv

链接有我的数据。 'min_0','min_1'等等是英雄联盟游戏的金币值,间隔为1分钟,持续到'min_80'。应该可以下载csv。

我想从蓝色值中减去红色值,并将该数字存储在每分钟的蓝色行上。

然后我想从红色值中减去蓝色值,并将该数字存储在每一分钟的红色行上。

为清楚起见,我只对匹配'match_id'的比较感兴趣。

这是我想要的输出图像:

Desired Output

我认为正确答案可能是这样的:

gold_df.loc[gold_df['red_or_blue_side'] == 'blue', :] = \
                            BLUE_VALUES - BLUE_VALUES.shifted_down
gold_df.loc[gold_df['red_or_blue_side'] == 'red', :] = \
                            RED_VALUES - RED_VALUES.shifted_up

我不清楚该代码的两件事。我需要选择除前两个之外的所有列来计算差异。我也不知道如何在所有相关列中选择值和移位值。

感谢您的帮助。如果需要更多信息,请告诉我。

-Mike

3 个答案:

答案 0 :(得分:0)

选择除前两个之外的所有列:

df[df.columns[2:]]

答案 1 :(得分:0)

选择除前两个之外的所有列:

df.iloc[:,2:]

答案 2 :(得分:0)

您可以groupby match_id然后使用.diff找出每个方向的差异,然后添加两个组件。

g = df.groupby('match_id', sort=False)[df.columns[2:]]
df = g.diff().fillna(0) + g.diff(-1).fillna(0)

df

min_0  min_1  min_2  min_3  min_4  min_5  min_6  min_7   min_8   min_9  \
0    0.0   15.0   46.0 -133.0  -60.0 -904.0 -505.0 -852.0  -763.0 -1224.0   
1    0.0  -15.0  -46.0  133.0   60.0  904.0  505.0  852.0   763.0  1224.0   
2    0.0    0.0    0.0   89.0  -92.0 -174.0  191.0   69.0   253.0   362.0   
3    0.0    0.0    0.0  -89.0   92.0  174.0 -191.0  -69.0  -253.0  -362.0   
4    0.0    0.0   17.0 -106.0 -136.0  400.0  363.0  829.0  1532.0  1862.0   
5    0.0    0.0  -17.0  106.0  136.0 -400.0 -363.0 -829.0 -1532.0 -1862.0   

    ...    min_71  min_72  min_73  min_74  min_75  min_76  min_77  min_78  \
0   ...       0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0   
1   ...       0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0   
2   ...       0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0   
3   ...       0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0   
4   ...       0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0   
5   ...       0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0   

   min_79  min_80  
0     0.0     0.0  
1     0.0     0.0  
2     0.0     0.0  
3     0.0     0.0  
4     0.0     0.0  
5     0.0     0.0