我目前正在从iPhone健康应用程序处理我的健康数据。我已经使用数据制作了一个pandas数据帧,但我想进一步浓缩它。 对于我的步骤数据,我有以下列:unit,startDate,endDate,value。 (请排除最后一栏。) 现在,iPhone每分钟记录数据,几分钟等。 我想总结每天使用日期的步数,但我不太清楚如何做到这一点。 先感谢您。 Pandas Dataframe
答案 0 :(得分:0)
我认为您要做的是创建数据框的子集,其中只包含日期等于某个值的行。您可以使用以下代码执行此操作:
today_df = df[df['startDate']==today]
steps_today = today_df.values.sum()['value']
答案 1 :(得分:0)
为此类问题创建时间序列DataFrame是有意义的(这是一个以时间数据作为索引的DataFrame):
首先,创建一个'time_diff'列(可选步骤):
df['time_diff'] = df['end_time'] - df['start_time']
df.drop(columns=['end_time'])
其次,将开始时间设为DataFrame的索引:
df = df.set_index('start_time')
第三,每天重新采样unit
值列(或相应列到步骤数),并.sum()
其内容。
df['unit'].resample('D').sum()
这些步骤会改变您的数据组织方式,但一般情况下,它会使整体操作变得更加容易。
答案 2 :(得分:0)
这是pandas grouping and aggregation进程设计的问题。
为了直接在DataFrame上执行基于时间的分组,您必须首先将DataFrame索引转换为类似日期时间的对象,这可以使用现有列通过set_index方法完成,如由@joaoavf描述。
或者,您可以通过提供密钥(列名称)和频率(来自可用的Grouper)为任何类似日期时间的列创建offset aliases对象。也就是说(步骤是DataFrame):
daily = steps.groupby(pd.Grouper(key='startDate', freq='D'))
在这种情况下,daily.sum()
将产生每天的总步数值。