[英]Extracting data belonging to a day from a given range of dates on a dataset
[英]Extracting data values belonging to a day and compute average value to each day
我有一个日期范围为2018年1月12日至8月3日的数据集,其中包含一些值:
df_luminosidad
DataFrame的维数为:
df_luminosidad.shape
(9752, 2)
每行数据的频率为半小时。 第一排开始于2018-01-12
df_luminosidad.iloc[0]
Fecha: 2018-01-12 00:17:28
Luz (lux) 1
Name: 0, dtype: object
最后一行于2018-08-03
结束
df_luminosidad.tail(1)
Fecha: Luz (lux)
9751 2018-08-03 23:44:59 1
如上所述,有许多行对应于一天。
我想创建一个新的数据框,仅选择1天作为Fecha:
列的值(没有重复的日期),然后从所有现有值中为Luz(lux) column
的选定日期选择平均值
看起来像这样:
| Fecha: | Luz(lux) - Average each day values |
| 2018-01-12 | 9183.479167 |
| 2018-01-13 | 7431.8125 |
| 2018-01-14 | 11073.1875 |
| 2018-01-15 | 11456.25 |
| . . |
| . . |
| . . |
| 2018-08-03 | 11331.229167 |
我正在使用pd.date_range()
函数创建一个数据df_luminosidad
,该数据df_luminosidad
的值从df_luminosidad
前一个数据帧到指定频率,例如在此答案中表示为@piRSquared
从1月12日到8月03日有203天(28周),那么我选择了204个类似period
属性,并且我使用的是freq
属性日历日频率D
df = pd.DataFrame(dict(
Date=pd.date_range('2018-01-12', periods=204, freq='D'),
Value=df_luminosidad['Luz (lux)'].mean()
))
直到这里,这种方法还是不错的,但是我对如何计算使用pd.date_range
选择的每一天的Luz (lux)
值的平均值pd.date_range
,因为在这一刻,我只是获得了所有天数的平均值从2018-01-12
至2018-08-03
,如如下:
| Date | Value |
| 2018-01-12 | 11228.888331 |
| 2018-01-13 | 11228.888331 |
| 2018-01-14 | 11228.888331 |
| 2018-01-15 | 11228.888331 |
| . . |
| . . |
| . . |
| 2018-08-03 | 11331.229167 |
我已经通过每个Fecha:
列值生成了一个数据Fecha:
,并且可以分别获取它们的平均值,但这迫使我单独读取每个文件日。
如何生成一种循环方式,将一天中的所有值每天分组为一个平均值,然后将它们放在一个数据框中?
为了进行时间序列分析,请尽可能先将日期列转换为索引,然后再方便地与日期配合使用。
df = pd.read_csv('file_name.csv', parse_dates =['Fecha'], index_col='Fecha')
然后,您可以将任何日期值提取到另一个临时数据框中。
dates = pd.date_range(start='2018-01-12 ', end='2018-08-03 ')
现在使用for循环,从“日期”列表中放样每个日期,然后将数据集的所需部分选择到另一个数据框中。
new_df = pd.DataFrame() # Creating temporary data frame to store each day value
for temp_date in dates:
required_date = str(temp_date)[:10] # this is to fetch only date value from whole time stamp
new_df = df1[required_date]
# Now our requrired data is in new dataframe, and we can do all things to our new dataframe.
这可能是一种幼稚的方法,但是现在我对您有很多建议。 希望它能工作。
我相信需要使用Grouper
mean
或总mean
resample
:
df_luminosidad['Fecha:'] = pd.to_datetime(df_luminosidad['Fecha:'])
df = df_luminosidad.resample('D', on='Fecha:')['Luz (lux)'].mean().reset_index()
要么:
df = (df_luminosidad.groupby(pd.Grouper(key='Fecha:', freq='D'))['Luz (lux)']
.mean()
.reset_index())
DatetimeIndex
另一种解决方案:
df_luminosidad['Fecha:'] = pd.to_datetime(df_luminosidad['Fecha:'])
df_luminosidad = df_luminosidad.set_index('Fecha:')
df = df_luminosidad.resample('D')['Luz (lux)'].mean().reset_index()
df = df_luminosidad.groupby(pd.Grouper(freq='D'))['Luz (lux)'].mean().reset_index()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.