我目前正在处理 csv 中的大量数据。这些数据正在使用 Pandas 导入到我的程序中。我目前正在尝试做的是检查系列中是否正在发生变化。我的数据框结构如下:
数据框
Time Data
209012424 123
209012424 352
209012424 1267
209012424 753
209012424 333
209012424 542
209012424 940
209012425 421
209012425 12
209012425 344
209012425 1
209012425 346
209012425 1435
209012428 555
209012428 322
如您所见,显示了一系列具有值的信息。我想要做的是创建一个新列来检查时间列中是否发生了变化。所需的输出将是:
Time Data Change
209012424 123 False
209012424 352 False
209012424 1267 False
209012424 753 False
209012424 333 False
209012424 542 False
209012424 940 False
209012425 421 True
209012425 12 False
209012425 344 False
209012425 1 False
209012425 346 False
209012425 1435 False
209012428 555 True
209012428 322 False
我的解决方案是使用以下代码:
cond1 = wholedf['TIME'].diff().shift(-1).eq(1).where(wholedf['TIME']==0)
wholedf['Change'] = wholedf['TIME'].diff().eq(1).where(wholedf['TIME'] == 1).fillna(cond1).astype('bool')
但是,我得到了输出:
Time Data Change
209012424 123 True
209012424 352 True
209012424 1267 True
209012424 753 True
209012424 333 True
209012424 542 True
209012424 940 True
209012425 421 True
209012425 12 True
209012425 344 True
209012425 1 True
209012425 346 True
209012425 1435 True
209012428 555 True
209012428 322 True
我不知道为什么会得到这个,但我希望其他人有解决方案!
希望这是足够的信息!提前谢谢你。
最佳答案
如果需要 True
用于没有第一行的所有更改值,请使用 Series.diff
并比较更大的 0
:
#added absolute if possible groups are not sorted
wholedf['Change'] = wholedf['TIME'].diff().abs().gt(0)
#first solution
#wholedf['Change'] = wholedf['TIME'].diff().fillna(0).ne(0)
print (wholedf)
TIME Data Change
0 209012424 123 False
1 209012424 352 False
2 209012424 1267 False
3 209012424 753 False
4 209012424 333 False
5 209012424 542 False
6 209012424 940 False
7 209012425 421 True
8 209012425 12 False
9 209012425 344 False
10 209012425 1 False
11 209012425 346 False
12 209012425 1435 False
13 209012428 555 True
14 209012428 322 False
关于python - bool 值总是返回 true? ( Pandas ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69939538/