python - 获取数据框中列的比例值 - Pandas
问题描述
我有一个这样的数据框,
ds 0 1 2 4 5 6
0 1991Q3 nan nan nan nan 1.0 nan
1 2014Q2 1.0 3.0 nan nan 1.0 nan
2 2014Q3 1.0 nan nan 1.0 4.0 nan
3 2014Q4 nan nan nan 2.0 3.0 nan
4 2015Q1 nan 1.0 2.0 4.0 4.0 nan
我想要这样的每列 0-6 的比例,
ds 0 1 2 4 5 6
0 1991Q3 0.00 0.00 0.00 0.00 1.00 0.00
1 2014Q2 0.20 0.60 0.00 0.00 0.20 0.00
2 2014Q3 0.16 0.00 0.00 0.16 0.67 0.00
3 2014Q4 0.00 0.00 0.00 0.40 0.60 0.00
4 2015Q1 0.00 0.09 0.18 0.36 0.36 0.00
有熊猫的方法吗?任何建议都会很棒。
解决方案
你可以这样做:
df = df.replace(np.nan, 0)
df = df.set_index('ds')
In [3194]: df.div(df.sum(1),0).reset_index()
Out[3194]:
ds 0 1 2 4 5 6
0 1991Q3 0.00 0.00 0.00 0.00 1.00 0.00
1 2014Q2 0.20 0.60 0.00 0.00 0.20 0.00
2 2014Q3 0.17 0.00 0.00 0.17 0.67 0.00
3 2014Q4 0.00 0.00 0.00 0.40 0.60 0.00
4 2015Q1 0.00 0.09 0.18 0.36 0.36 0.00
或者你可以使用df.apply
:
In [3196]: df = df.replace(np.nan, 0)
In [3197]: df.iloc[:,1:] = df.iloc[:,1:].apply(lambda x: x/x.sum(), axis=1)
In [3198]: df
Out[3197]:
ds 0 1 2 4 5 6
0 1991Q3 0.00 0.00 0.00 0.00 1.00 0.00
1 2014Q2 0.20 0.60 0.00 0.00 0.20 0.00
2 2014Q3 0.17 0.00 0.00 0.17 0.67 0.00
3 2014Q4 0.00 0.00 0.00 0.40 0.60 0.00
4 2015Q1 0.00 0.09 0.18 0.36 0.36 0.00
推荐阅读
- python - 在 Python 中的数据框中解释 CSV 文本分隔符时出错
- java - 在 Helidon MP 中配置 Jersey
- php - 如何保护codeIgniter中公用文件夹中的文件?
- r - 动态图像轮播 R 闪亮
- arrays - 使用 id 在 React 中删除状态数组的对象
- grafana - Grafana 无法解析变量
- snowflake-cloud-data-platform - 添加时间戳列以在雪花中查看
- c - 如何在C中同步多个进程?
- orc - 当文件存在且覆盖为 false 时,Apache ORCFile createWriter 失败
- rest - 如何让我的 Yii2 urlManager 规则起作用?它返回 404 错误