在Pandas Dataframe中,我输入数据唯一键。
例如 输入:
time range Key
2018-03-04 00:00:06.520 0 1
2018-03-04 00:00:07.130 0 1
2018-03-04 00:00:07.850 1 1
2018-03-04 00:00:08.420 1 1
2018-03-04 00:00:09.210 2 1
2018-03-04 00:00:10.070 2 1
2018-03-04 00:00:10.840 3 1
2018-03-04 00:00:11.230 3 1
2018-03-04 00:00:11.980 4 1
2018-03-04 00:00:12.560 4 1
2018-03-04 00:00:13.120 0 2
2018-03-04 00:00:13.790 0 2
2018-03-04 00:00:14.330 1 2
2018-03-04 00:00:15.280 1 2
2018-03-04 00:00:15.960 2 2
2018-03-04 00:00:16.420 2 2
2018-03-04 00:00:17.090 3 2
...
我想输出dataFrame就在这里。
filterExpr.map(df.filter).getOrElse(df)
我想使用范围&时间得到关键值增加..
我该怎么办?
答案 0 :(得分:2)
我认为您可以使用lt()
(小于),shift()
和cumsum()
。您可以在每次range
列停止增加时(即,当range
值小于之前的range
值时)累计计算这些值。< / p>
df['Key'] = df['range'].lt(df['range'].shift()).cumsum() + 1
>>> df
time range Key
0 2018-03-04 00:00:06.520 0 1
1 2018-03-04 00:00:07.130 0 1
2 2018-03-04 00:00:07.850 1 1
3 2018-03-04 00:00:08.420 1 1
4 2018-03-04 00:00:09.210 2 1
5 2018-03-04 00:00:10.070 2 1
6 2018-03-04 00:00:10.840 3 1
7 2018-03-04 00:00:11.230 3 1
8 2018-03-04 00:00:11.980 4 1
9 2018-03-04 00:00:12.560 4 1
10 2018-03-04 00:00:13.120 0 2
11 2018-03-04 00:00:13.790 0 2
12 2018-03-04 00:00:14.330 1 2
13 2018-03-04 00:00:15.280 1 2
14 2018-03-04 00:00:15.960 2 2
15 2018-03-04 00:00:16.420 2 2
16 2018-03-04 00:00:17.090 3 2
答案 1 :(得分:1)
diff
df.assign(Key=df.range.diff().lt(0).cumsum().add(1))
time range Key
0 2018-03-04 00:00:06.520 0 1
1 2018-03-04 00:00:07.130 0 1
2 2018-03-04 00:00:07.850 1 1
3 2018-03-04 00:00:08.420 1 1
4 2018-03-04 00:00:09.210 2 1
5 2018-03-04 00:00:10.070 2 1
6 2018-03-04 00:00:10.840 3 1
7 2018-03-04 00:00:11.230 3 1
8 2018-03-04 00:00:11.980 4 1
9 2018-03-04 00:00:12.560 4 1
10 2018-03-04 00:00:13.120 0 2
11 2018-03-04 00:00:13.790 0 2
12 2018-03-04 00:00:14.330 1 2
13 2018-03-04 00:00:15.280 1 2
14 2018-03-04 00:00:15.960 2 2
15 2018-03-04 00:00:16.420 2 2
16 2018-03-04 00:00:17.090 3 2
flatnonzero
和repeat
a = np.diff(np.flatnonzero(np.concatenate(
[[True], np.diff(df.range.values) < 0, [True]]
)))
df.assign(Key=np.arange(a.size).repeat(a) + 1)
time range Key
0 2018-03-04 00:00:06.520 0 1
1 2018-03-04 00:00:07.130 0 1
2 2018-03-04 00:00:07.850 1 1
3 2018-03-04 00:00:08.420 1 1
4 2018-03-04 00:00:09.210 2 1
5 2018-03-04 00:00:10.070 2 1
6 2018-03-04 00:00:10.840 3 1
7 2018-03-04 00:00:11.230 3 1
8 2018-03-04 00:00:11.980 4 1
9 2018-03-04 00:00:12.560 4 1
10 2018-03-04 00:00:13.120 0 2
11 2018-03-04 00:00:13.790 0 2
12 2018-03-04 00:00:14.330 1 2
13 2018-03-04 00:00:15.280 1 2
14 2018-03-04 00:00:15.960 2 2
15 2018-03-04 00:00:16.420 2 2
16 2018-03-04 00:00:17.090 3 2