首页 > 解决方案 > 获取数据框中列的比例值 - 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

有熊猫的方法吗?任何建议都会很棒。

标签: pythonpython-3.xpandas

解决方案


你可以这样做:

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

推荐阅读