pandas 数据帧中的时间序列
Time sequence in pandas dataframe
下面是dataframe (df)的样本:-
alpha
value
0
a
5
1
a
8
2
a
4
3
b
2
4
b
1
我知道如何按照组来制作序列(数字):
df["serial"] = df.groupby("alpha").cumcount()+1
alpha
value
serial
0
a
5
1
1
a
8
2
2
a
4
3
3
b
2
1
4
b
1
2
但是我需要间隔 30 分钟的日期时间序列而不是数字:
预期结果:
alpha
value
serial
0
a
5
2021-01-01 23:30:00
1
a
8
2021-01-02 00:00:00
2
a
4
2021-01-02 00:30:00
3
b
2
2021-01-01 23:30:00
4
b
1
2021-01-02 00:00:00
您可以简单地将结果乘以 pd.Timedelta
:
print ((df.groupby("alpha").cumcount()+1)*pd.Timedelta(minutes=30)+pd.Timestamp("2021-01-01 23:00:00"))
0 2021-01-01 23:30:00
1 2021-01-02 00:00:00
2 2021-01-02 00:30:00
3 2021-01-01 23:30:00
4 2021-01-02 00:00:00
dtype: datetime64[ns]
尝试 to_datetime
和 groupby
cumcount
,然后乘以 pd.Timedelta
30 分钟:
>>> df['serial'] = pd.to_datetime('2021-01-01 23:30:00') + df.groupby('alpha').cumcount() * pd.Timedelta(minutes=30)
>>> df
alpha value serial
0 a 5 2021-01-01 23:30:00
1 a 8 2021-01-02 00:00:00
2 a 4 2021-01-02 00:30:00
3 b 2 2021-01-01 23:30:00
4 b 1 2021-01-02 00:00:00
>>>
下面是dataframe (df)的样本:-
alpha | value | |
---|---|---|
0 | a | 5 |
1 | a | 8 |
2 | a | 4 |
3 | b | 2 |
4 | b | 1 |
我知道如何按照组来制作序列(数字):
df["serial"] = df.groupby("alpha").cumcount()+1
alpha | value | serial | |
---|---|---|---|
0 | a | 5 | 1 |
1 | a | 8 | 2 |
2 | a | 4 | 3 |
3 | b | 2 | 1 |
4 | b | 1 | 2 |
但是我需要间隔 30 分钟的日期时间序列而不是数字:
预期结果:
alpha | value | serial | |
---|---|---|---|
0 | a | 5 | 2021-01-01 23:30:00 |
1 | a | 8 | 2021-01-02 00:00:00 |
2 | a | 4 | 2021-01-02 00:30:00 |
3 | b | 2 | 2021-01-01 23:30:00 |
4 | b | 1 | 2021-01-02 00:00:00 |
您可以简单地将结果乘以 pd.Timedelta
:
print ((df.groupby("alpha").cumcount()+1)*pd.Timedelta(minutes=30)+pd.Timestamp("2021-01-01 23:00:00"))
0 2021-01-01 23:30:00
1 2021-01-02 00:00:00
2 2021-01-02 00:30:00
3 2021-01-01 23:30:00
4 2021-01-02 00:00:00
dtype: datetime64[ns]
尝试 to_datetime
和 groupby
cumcount
,然后乘以 pd.Timedelta
30 分钟:
>>> df['serial'] = pd.to_datetime('2021-01-01 23:30:00') + df.groupby('alpha').cumcount() * pd.Timedelta(minutes=30)
>>> df
alpha value serial
0 a 5 2021-01-01 23:30:00
1 a 8 2021-01-02 00:00:00
2 a 4 2021-01-02 00:30:00
3 b 2 2021-01-01 23:30:00
4 b 1 2021-01-02 00:00:00
>>>