提取数据框中具有相同日期的所有行

时间:2019-05-09 10:50:14

标签: python pandas

我有一个数据框,该数据框由通过监视活动(以一分钟的时间步长)收集的数据组成。

数据框具有以下格式的日期时间的第一列:

2018-04-15 00:00:00+02:00
2018-04-15 00:01:00+02:00
...
2018-04-18 23:59:00+02:00

随后是监视值的列。

如何创建一个新的数据框,其中包含在给定的一天中收集的所有数据行,例如2018-04-15,从00:0023:59

2 个答案:

答案 0 :(得分:1)

首先确保该列的dtype是datetime。

df['Column Name'].dtype

如果输出是'O'或其他。做:

df['Column Name'] = pd.to_datetime(df['Column Name'])

接下来,我们有两个选择

1-我们可以将日期和时间划分为单独的列,并将其用作multi_index

df['Date'] = df['Column Name'].dt.date
df['Time'] = df['Column Name'].dt.time

df.set_index('Date','Time',drop=True)

#to access all rows for a particular date

df['Place your required date']

2-或使用loc

df_temp = df.loc[df['Date'] == 'Your Date']

答案 1 :(得分:0)

您可以使用pd.Grouper(freq='D')按天分组。结果是生成器,生成名称-数据帧对:

示例数据框:

df = pd.DataFrame(np.random.random(10000), index=pd.date_range('15.05.2018', periods=10000, freq='min'))

df.head()
                            0
2018-05-15 00:00:00  0.693383
2018-05-15 00:01:00  0.158559
2018-05-15 00:02:00  0.752485
2018-05-15 00:03:00  0.990374
2018-05-15 00:04:00  0.768559

您可以遍历各组,即整天通过写

for name, group in df.groupby(pd.Grouper(freq='D')):
    print(f'Day: {name}', f'\ndataframe:\n{group.head()}\n')

结果(为简洁起见,再次打印每天的head() ):

Day: 2018-05-15 00:00:00 
dataframe:
                            0
2018-05-15 00:00:00  0.693383
2018-05-15 00:01:00  0.158559
2018-05-15 00:02:00  0.752485
2018-05-15 00:03:00  0.990374
2018-05-15 00:04:00  0.768559

Day: 2018-05-16 00:00:00 
dataframe:
                            0
2018-05-16 00:00:00  0.553670
2018-05-16 00:01:00  0.091114
2018-05-16 00:02:00  0.226051
2018-05-16 00:03:00  0.826132
2018-05-16 00:04:00  0.817027

.
.
.

编辑:
在单独的列中具有标准索引和日期时间值的数据框也是如此:

示例数据框:

df = pd.DataFrame({'A': np.random.random(10000), 'date': pd.date_range('15.05.2018', periods=10000, freq='min')})

df.head()
          A                date
0  0.238412 2018-05-15 00:00:00
1  0.612181 2018-05-15 00:01:00
2  0.204367 2018-05-15 00:02:00
3  0.246023 2018-05-15 00:03:00
4  0.987291 2018-05-15 00:04:00

迭代通过将date-column-name传递到pd.Grouper()而生成的组:

for name, group in df.groupby(pd.Grouper(key='date', freq='D')):
    print(f'Day: {name}', f'\ndataframe:\n{group.head()}\n')

结果(为简洁起见,再次打印每天的head() ):

Day: 2018-05-15 00:00:00 
dataframe:
          A                date
0  0.238412 2018-05-15 00:00:00
1  0.612181 2018-05-15 00:01:00
2  0.204367 2018-05-15 00:02:00
3  0.246023 2018-05-15 00:03:00
4  0.987291 2018-05-15 00:04:00

Day: 2018-05-16 00:00:00 
dataframe:
             A                date
1440  0.039037 2018-05-16 00:00:00
1441  0.762621 2018-05-16 00:01:00
1442  0.158714 2018-05-16 00:02:00
1443  0.132067 2018-05-16 00:03:00
1444  0.277562 2018-05-16 00:04:00

.
.
.