python-3.x - 如何使用 Python 计算数据随时间的变化
问题描述
对于以下数据框,我需要为每组日期、location_id、uid计算'count'的变化,并将该组包含在结果中。
# Sample DataFrame
df = pd.DataFrame({'date': ['2021-01-01', '2021-01-01','2021-01-01','2021-01-02', '2021-01-02','2021-01-02'],
'location_id':[1001,2001,3001, 1001,2001,3001],
'uid': ['001', '003', '002','001', '004','002'],
'uid_count':[1, 2,3 ,2, 2, 4]})
date location_id uid count
0 2021-01-01 1001 001 1
1 2021-01-01 2001 003 2
2 2021-01-01 3001 002 3
3 2021-01-02 1001 001 2
4 2021-01-02 2001 004 2
5 2021-01-02 3001 002 4
我想要的结果如下所示:
# Desired Results
date location_id uid
2021-01-01 1001 001 0
2001 003 0
3001 002 0
2021-01-02 1001 001 1
2001 004 0
3001 002 1
我想我可以通过groupby
使用以下方法来做到这一点,但没有进行所需的计算:
# Current code:
df.groupby(['date','location_id','uid'],sort=False).apply(lambda x: (x['count'].values[-1] - x['count'].values[0]))
# Current results:
date location_id uid
2021-01-01 1001 001 0
2001 003 0
3001 002 0
2021-01-02 1001 001 0
2001 004 0
3001 002 0
我怎样才能得到想要的结果?
解决方案
- 以下代码适用于测试数据框,我不确定更大的数据框
.transform()
用于计算 的连续出现的差异'uid_count'
,对于每个uid
,具有与 相同的索引df
。- , 的问题
.groupby(['date','location_id','uid']
是每个组只包含一个值。 - 如果需要
'uid_count'
,在末尾删除。.drop(columns='uid_count')
import pandas as pd
# sort the dataframe
df = df.sort_values(['date', 'location_id', 'uid'])
# groupby and transform based on the difference in uid_count
uid_count_diff = df.groupby(['location_id', 'uid']).uid_count.transform(lambda x: x.diff()).fillna(0).astype(int)
# create a column in df
df['uid_count_diff'] = uid_count_diff
# set the index
df = df.set_index(['date', 'location_id', 'uid'])
# result
uid_count uid_count_diff
date location_id uid
2021-01-01 1001 001 1 0
2001 003 2 0
3001 002 3 0
2021-01-02 1001 001 2 1
2001 004 2 0
3001 002 4 1
推荐阅读
- python - 设置行的选择等于字符串列表
- java - 图像未在 ImageView 中加载 - Android
- r - 从 Bookdown 构建时,R JuliaCall 崩溃
- google-smart-home - 智能家居操作中 StatusReport 特征的问题
- reactjs - React img 元素属性类型定义
- html - 如何打破电子邮件正文中的长 HTML 字符串
- java - Android ConstraintLayout - 如何创建空间不均匀的链?
- python - Python Django NoReverseMatch 模板
- javascript - 为什么在我的 React Form 中添加一个额外的按钮会导致我的两个按钮都停止工作?
- c++ - 了解 VirtualAlloc 中的基地址