获取熊猫两行之间的差异

时间:2019-03-01 11:43:01

标签: python pandas dataframe

您好,我在stackoverflow上阅读了很多有关此问题的问题,但是我有一些不同的任务。

我有这个DF:

#    DateTime       Close   
1    2000-01-04    1460
2    2000-01-05    1470 
3    2000-01-06    1480
4    2000-01-07    1450  

我想获取Close列的每一行之间的差异,但是如果差异为正或负,则存储一个[1-0]值。我想要这个结果:

#    DateTime       Close  label 
1    2000-01-04    1460    1
2    2000-01-05    1470    1
3    2000-01-06    1480    1
4    2000-01-07    1450    0

我已经做到了:

df = pd.read_csv(DATASET_path)
df['Label'] = 0
df['Label'] = (df['Close'] - df['Close'].shift(1) > 1)

问题是结果移位了一行,所以我得到的区别是从第二行开始而不是第一行。 (而且我得到的是布尔值[True,False],而不是1或0)。

这就是我得到的:

#    DateTime       Close  label 
1    2000-01-04    1460    
2    2000-01-05    1470    True
3    2000-01-06    1480    True
4    2000-01-07    1450    True

有解决方案吗?

谢谢

2 个答案:

答案 0 :(得分:2)

您可以使用DataFrame.diff并检查哪个第一差​​大于0。最后使用int将结果转换为.astype(int)

df['label'] = df.Close.diff().fillna(1).gt(0).astype(int)

输出

   #    DateTime  Close  label
0  1  2000-01-04   1460      1
1  2  2000-01-05   1470      1
2  3  2000-01-06   1480      1
3  4  2000-01-07   1450      0

答案 1 :(得分:1)

我认为您需要用bfilldiff来替换上一个缺失的第一个缺失值,最后将掩码从True/False转换为1/0的整数:

df['Label'] = (df['Close'].diff().bfill() > 0).astype(int)

验证解决方案:

print (df)
     DateTime  Close
1  2000-01-04   1460
2  2000-01-05   1440 <-changed value
3  2000-01-06   1480
4  2000-01-07   1450

df['Label'] = (df['Close'].diff().bfill() > 0).astype(int)
print (df)
     DateTime  Close  Label
1  2000-01-04   1460      0
2  2000-01-05   1440      0
3  2000-01-06   1480      1
4  2000-01-07   1450      0