如何从熊猫中的日期时间中删除日期

时间:2019-10-08 23:42:52

标签: python pandas

数据如下:

     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  

我有2个扩展问题:

1)我们如何计算该2018-01-02子集中有多少行?

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

2 个答案:

答案 0 :(得分:1)

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

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

这是假设Group_Id是一个int,否则:

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

答案 1 :(得分:1)

使用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]