您好,我在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
有解决方案吗?
谢谢
答案 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)
我认为您需要用bfill
和diff
来替换上一个缺失的第一个缺失值,最后将掩码从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