python - Creating time series df with category and date and percentage change
问题描述
I have a dataframe like this:
category: number: date:
dog 100 2020-01-01
cat 50 2020-01-01
dog 150 2020-01-02
mouse 200 2020-01-01
mouse 150 2020-01-02
cat 100 2020-01-02
I am trying to create a dataframe that gets the percentage change for each individual category across each date, similar to this:
category: number: date: percentage_change:
dog 100 2020-01-01 -
dog 150 2020-01-02 50%
cat 50 2020-01-01 -
cat 100 2020-01-02 100%
mouse 200 2020-01-01 -
mouse 150 2020-01-02 25%
I have tried this:
df['number'].pct_change()
But this doesn't get pct_change for each category.
Any help greatly appreciated.
解决方案
DataFrame.sort_values
与 一起使用GroupBy.pct_change
:
df = df.sort_values(['category','date'])
df['percentage_change'] = df.groupby('category')['number'].pct_change()
print (df)
category number date percentage_change
1 cat 50 2020-01-01 NaN
5 cat 100 2020-01-02 1.00
0 dog 100 2020-01-01 NaN
2 dog 150 2020-01-02 0.50
3 mouse 200 2020-01-01 NaN
4 mouse 150 2020-01-02 -0.25
对于百分比:
s = df['percentage_change'].mul(100).round().fillna(0,downcast='infer').astype(str) + '%'
df['percentage_change'] = np.where(df['percentage_change'].isna(), '-', s)
print (df)
category number date percentage_change
1 cat 50 2020-01-01 -
5 cat 100 2020-01-02 100%
0 dog 100 2020-01-01 -
2 dog 150 2020-01-02 50%
3 mouse 200 2020-01-01 -
4 mouse 150 2020-01-02 -25%
推荐阅读
- docker - 如何在由父 docker 共享 docker.sock 创建的子 docker 内挂载卷
- python - 检查 4D 图中缺失的坐标组合并为缺失的组合添加虚拟值
- swift - 如何识别 SKCamera 视图中的特定节点?
- css - CSS Calc:每个浏览器宽度垂直居中定位元素
- java - 如何在 JNI 中处理 -classpath 属性 Java 10
- java - 无法将 ImageIcon 添加到 JFrame
- string - 什么是字符串中的 \0?
- python - 删除标准输出缓冲区中的最后一个字符
- python - 如何 pip install 进行开发?
- python - 在 Python 中从 Entry() 获取值