如何验证 pandas 列中的每个元素是否逐行严格增加 +1
How to verify if each element in a pandas columns increase strictly by +1 from row to row
假设我有以下 pandas.dataframe:
data
series time_idx value
0 0 0 -0.000000
1 0 1 0.018844
2 0 2 0.028694
3 0 3 0.050784
4 0 4 0.067037
... ... ... ...
3995 9 395 0.973978
3996 9 396 0.944002
3997 9 397 1.001089
3998 9 398 1.132001
3999 9 399 1.169244
4000 rows × 3 columns
我想测试每个系列 (0..9) 的时间索引是否逐行递增 1,如果不是,差异在哪里?
我考虑过按系列和 time_index 对数据帧进行排序,然后与索引 mod 400 进行比较,但这不是一个好的解决方案。有什么建议吗?
谢谢
以下是根据我从你的问题中了解到的。看看这是否回答了您的问题。我必须使用 'True' 而不是 Boolean True 因为数据框将其转换为数字 1.0.
df['IncOne'] = (df.series==df.series.shift())
df['IncOne'] = (
np.where(df.IncOne,
np.where( df.time_idx.eq(df.time_idx.shift()+1),
'True' , df.time_idx-df.time_idx.shift() ),
''))
series
time_idx
value
IncOne
0
0
0
0
1
0
1
0.018844
True
2
0
2
0.028694
True
3
0
3
0.050784
True
4
0
4
0.067037
True
5
0
6
0
2.0
6
0
7
0.018844
True
7
0
8
0.028694
True
8
0
9
0.050784
True
9
0
12
0.067037
3.0
10
0
13
1
True
11
9
395
0.973978
12
9
396
0.944002
True
13
9
397
1.00109
True
14
9
398
1.132
True
15
9
399
1.16924
True
假设数据帧是 df
你可以试试这个:
df["diff"] = df.groupby(by="series")["time_idx"].diff().fillna(1) != 1
它将创建一个包含布尔值的新列 "diff"
。 True
值表示当前行中的 time_idx
值与其前一行中的值之差不等于 1。只有对应于同一系列的行之间的差异才能给出 True
值。
假设我有以下 pandas.dataframe:
data
series time_idx value
0 0 0 -0.000000
1 0 1 0.018844
2 0 2 0.028694
3 0 3 0.050784
4 0 4 0.067037
... ... ... ...
3995 9 395 0.973978
3996 9 396 0.944002
3997 9 397 1.001089
3998 9 398 1.132001
3999 9 399 1.169244
4000 rows × 3 columns
我想测试每个系列 (0..9) 的时间索引是否逐行递增 1,如果不是,差异在哪里?
我考虑过按系列和 time_index 对数据帧进行排序,然后与索引 mod 400 进行比较,但这不是一个好的解决方案。有什么建议吗?
谢谢
以下是根据我从你的问题中了解到的。看看这是否回答了您的问题。我必须使用 'True' 而不是 Boolean True 因为数据框将其转换为数字 1.0.
df['IncOne'] = (df.series==df.series.shift())
df['IncOne'] = (
np.where(df.IncOne,
np.where( df.time_idx.eq(df.time_idx.shift()+1),
'True' , df.time_idx-df.time_idx.shift() ),
''))
series | time_idx | value | IncOne | |
---|---|---|---|---|
0 | 0 | 0 | 0 | |
1 | 0 | 1 | 0.018844 | True |
2 | 0 | 2 | 0.028694 | True |
3 | 0 | 3 | 0.050784 | True |
4 | 0 | 4 | 0.067037 | True |
5 | 0 | 6 | 0 | 2.0 |
6 | 0 | 7 | 0.018844 | True |
7 | 0 | 8 | 0.028694 | True |
8 | 0 | 9 | 0.050784 | True |
9 | 0 | 12 | 0.067037 | 3.0 |
10 | 0 | 13 | 1 | True |
11 | 9 | 395 | 0.973978 | |
12 | 9 | 396 | 0.944002 | True |
13 | 9 | 397 | 1.00109 | True |
14 | 9 | 398 | 1.132 | True |
15 | 9 | 399 | 1.16924 | True |
假设数据帧是 df
你可以试试这个:
df["diff"] = df.groupby(by="series")["time_idx"].diff().fillna(1) != 1
它将创建一个包含布尔值的新列 "diff"
。 True
值表示当前行中的 time_idx
值与其前一行中的值之差不等于 1。只有对应于同一系列的行之间的差异才能给出 True
值。