在DataFrame中给定字段1的情况下,有条件地找到字段2中出现的百分比

时间:2016-01-14 17:30:42

标签: python python-2.7 pandas dataframe

我通过Spyder IDE运行Windows 10,Python 2.7。

我有一只叫DataFrame的大熊猫df

df = pd.DataFrame({'fld1': ['x', 'x', 'x','x','y','y','y','z','z']
                , 'fld2': ['a', 'b', 'c','c','a','b','c','a','b']})

>>> df
fld1 fld2
0    x    a
1    x    b
2    x    c
3    x    c
4    y    a
5    y    b
6    y    c
7    z    a
8    z    b

我想计算构成fld2的{​​{1}}的百分比,并将该百分比保存在fld1中,以便该产品是fld3和{{的唯一组合1}}。此代码的产品应如fld1

fld2

1 个答案:

答案 0 :(得分:2)

您可以使用groupbysize并除以transform创建的总和:

print df

  fld1 fld2
0    x    a
1    x    b
2    x    c
3    x    c
4    y    a
5    y    b
6    y    c
7    z    a
8    z    b
g = df.groupby(['fld1', 'fld2'])['fld1'].size()
print g

fld1  fld2
x     a       1
      b       1
      c       2
y     a       1
      b       1
      c       1
z     a       1
      b       1
dtype: int64

print g / g.groupby(level=0).transform(sum)

fld1  fld2
x     a       0.250000
      b       0.250000
      c       0.500000
y     a       0.333333
      b       0.333333
      c       0.333333
z     a       0.500000
      b       0.500000
dtype: float64