python - 是否可以为数据框的每一列创建一个额外的 pct_change 列?
问题描述
我试图自己解决这个问题,并搜索了其他主题以寻求帮助,但是,我的问题仍然存在。如果有人可以帮助我或指出正确的方向,我将不胜感激
我对 python 还很陌生,我正在尝试对 pandas 数据框进行一些更改。总而言之,我想验证销售数据的百分比变化。
我知道 pct_change 方法,下面是我尝试过的方法。
这是一个看起来像我的原始数据框的示例数据:
store_id sales_value day
0 1 54,141.00 2020-12-22
1 1 78,921.00 2020-12-23
2 6 5,894.00 2020-12-24
3 6 22,991.00 2020-12-23
4 6 25,802.00 2020-12-22
我做了一个函数来计算行的变化。它看起来像这样:
def var_percent(df, n):
return df.pct_change(n)
然后,使用:
df['var_pct'] = var_percent(df['sales_value'],1)
它给了我类似以下的东西:
store_id sales_value day var_pct
0 1 54,141.00 2020-12-22 nan
1 1 78,921.00 2020-12-23 0.46
4 6 25,802.00 2020-12-22 -0.67
3 6 22,991.00 2020-12-23 -0.11
2 6 5,894.00 2020-12-24 -0.74
那不是我真正想要的。我需要单独查看每个商店的更改(store_id),这种类型的配置计算行,无论它来自哪个商店。
继续前进,我尝试了这个:
df.set_index(["day", "store_id"]).unstack(level=1)
最后我得到了我的实际数据框,我坚持使用它,它有点像这样:
sotore_id 1 6 15 22
day
2020-12-22 54141 25802 173399 36,200.00
2020-12-23 78921 22991 234885 32,762.00
2020-12-24 0 5894 0 10,956.00
2020-12-26 0 0 0 0.00 10980
2020-12-28 0 0 0 0.00 0
现在数据框是我需要的样子,但我还没有找到一种方法来实现 pct_change 我想要的方式,就像这样,为每个现有列添加一个百分比变化列(这些是虚拟数字,它是只是我希望它的视觉表示):
sotore_id 1 1_pct 6 6_pct 15 15_pct
day
2020-12-22 54141 0 25802 0 173399 0
2020-12-23 78921 25 22991 -8 234885 20
2020-12-24 0 0 5894 -60 0 0
2020-12-26 0 0 0.00 0 10980 1000
2020-12-28 0 0 0.00 0 0 0
甚至有可能这样做吗?
解决方案
您可以使用以下内容:
销售值应转换为数字,日期应更改为日期时间,然后对数据进行排序。如果所有这些都已经完成,您可以跳过此块:
df['sales_value']=pd.to_numeric(df['sales_value'].str.replace(",",''))
df['day'] = pd.to_datetime(df['day'])
df = df.sort_values(['store_id','day'])
计算pct_change
每组,然后unstack
out = (df.assign(pct=df.groupby("store_id")['sales_value'].pct_change()
.mul(100).round()).set_index(["day", "store_id"])
.unstack(level=1).fillna(0).sort_index(level=1,axis=1))
out.columns = out.columns.map('{0[1]} {0[0]}'.format)
print(out)
天 | 1% | 1 个销售价值 | 6% | 6 销售价值 |
---|---|---|---|---|
2020-12-22 | 0.0 | 54141.0 | 0.0 | 25802.0 |
2020-12-23 | 46.0 | 78921.0 | -11.0 | 22991.0 |
2020-12-24 | 0.0 | 0.0 | -74.0 | 5894.0 |
推荐阅读
- mysql - magento2 mysql更新表查询
- mysql - 使用索引时如何保证一致性?
- sqlite - 是否可以在 SQLite3 中的多于 1 列中使值唯一?
- java - 使用 Spring Security 更新角色时如何注销用户
- python - 如何在异步收集中获得以下输出
- amazon-s3 - 使用 lambda 中的 boto3 和 psycopg2 中的 copy_from 跳过 csv 标题行
- php - 使用 htaccess URL 重写的 CSS/JSS 加载问题
- laravel - PHP Imagick 不适用于 Laravel 8 中的 PDF 文件,简单的 ImagickException
- c# - SweetAlert2 ASP.NET Gridview 删除行确认
- django - CreateView django-role-permission