系列数据增加数量

时间:2018-05-15 01:47:19

标签: python pandas

在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)

我想使用范围&时间得到关键值增加..

我该怎么办?

2 个答案:

答案 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

flatnonzerorepeat

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