Pandas如何从datetime中提取日期

2024-09-22 16:35:41 发布

您现在位置:Python中文网/ 问答频道 /正文

数据如下所示:

     Id           Timestamp         Data    Group_Id    
0   5999    2018-01-01 00:00:05.523 125.5   101 
1   6000    2018-01-01 00:00:05.757 125.0   101 
2   6001    2018-01-02 00:00:13.507 127.0   52  
3   6002    2018-01-02 00:00:13.743 126.5   52  
4   6003    2018-01-03 00:00:15.407 125.5   50

基本上,我想检查/打印特定日期的数据,比如2018-01-02。我知道striptime来自datetime,但不确定最好的方法是什么。你知道吗

预期输出如下所示:

     Id           Timestamp         Data    Group_Id    
2   6001    2018-01-02 00:00:13.507 127.0   52  
3   6002    2018-01-02 00:00:13.743 126.5   52  

我有两个问题:

1)如何计算2018-01-02子集中的行数?你知道吗

2)我们可以在Group_Id上添加第二个条件来过滤日期2018-01-02Group_Id等于52的行吗?你知道吗


Tags: 数据方法iddatadatetimegroup条件timestamp
2条回答

使用dt.strftime然后用boolean indexing获得与日期相等的所有行

m = df['Timestamp'].dt.strftime('%Y-%m-%d') == '2018-01-02'
df[m]

或在一行中:

df[df['Timestamp'].dt.strftime('%Y-%m-%d').eq('2018-01-02')]

输出

     Id               Timestamp   Data  Group_Id
2  6001 2018-01-02 00:00:13.507  127.0        52
3  6002 2018-01-02 00:00:13.743  126.5        52

我们也可以将set_index.loc一起使用:

df.set_index('Timestamp').loc['2018-01-02'].reset_index()

输出

                Timestamp    Id   Data  Group_Id
0 2018-01-02 00:00:13.507  6001  127.0        52
1 2018-01-02 00:00:13.743  6002  126.5        52

注意:如果您的Timestamp列还不是datetime,请在运行上述操作之前使用以下代码:

df['Timestamp'] = pd.to_datetime(df['Timestamp'])

问题1:

m = df['Timestamp'].dt.strftime('%Y-%m-%d') == '2018-01-02'
df[m].shape[0]

或者

len(df[m])

问题2:

m1 = df['Timestamp'].dt.strftime('%Y-%m-%d') == '2018-01-02'
m2 = df['Group_Id'].eq(52)

df[m1&m2]

这将为您提供预期的输出:

df[df.Timestamp.dt.date == pd.to_datetime('2018-01-02')]

为了回答您的扩展问题,在末尾添加shape[0]将告诉您子集中有多少行。你知道吗

df[df.Timestamp.dt.date == pd.to_datetime('2018-01-02')].shape[0]

要添加多个条件:

df[(df.Timestamp.dt.date == pd.to_datetime('2018-01-02')) & (df.Group_Id == 52)]

这是假设组\u Id是int,否则:

df[(df.Timestamp.dt.date == pd.to_datetime('2018-01-02')) & (df.Group_Id == '52')]

相关问题 更多 >