使用pandas选择列作为另一列的条件

时间:2018-02-21 17:48:04

标签: python pandas

我目前正在从iPhone健康应用程序处理我的健康数据。我已经使用数据制作了一个pandas数据帧,但我想进一步浓缩它。 对于我的步骤数据,我有以下列:unit,startDate,endDate,value。 (请排除最后一栏。) 现在,iPhone每分钟记录数据,几分钟等。 我想总结每天使用日期的步数,但我不太清楚如何做到这一点。 先感谢您。 Pandas Dataframe

3 个答案:

答案 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()将产生每天的总步数值。