Python 通过获取组内满足条件的值的百分比
我有一个由Python 通过获取组内满足条件的值的百分比,python,python-2.7,pandas,Python,Python 2.7,Pandas,我有一个由人、天和类型组成的数据框架。这些数据没有真正意义,只是一个例子 我想先对人进行分组,然后键入类型,然后找出小于或等于3天的天数百分比 为此,我创建了一个Boolean列,时间等于或小于3天。然后应用count和sum聚合。我不太喜欢这种方法,因为我只需要天数列的计数,以及天数限制列的总和。这个方法实质上是创建两个不必要的列,并创建一些额外的步骤。如何清理此代码,使其在更大的数据集上更高效地运行 import pandas as pd # create dataframe df = pd
人
、天
和类型
组成的数据框架。这些数据没有真正意义,只是一个例子
我想先对人
进行分组,然后键入类型
,然后找出小于或等于3天的天数百分比
为此,我创建了一个Boolean
列,时间等于或小于3天。然后应用count
和sum
聚合。我不太喜欢这种方法,因为我只需要天数
列的计数
,以及天数限制
列的总和
。这个方法实质上是创建两个不必要的列,并创建一些额外的步骤。如何清理此代码,使其在更大的数据集上更高效地运行
import pandas as pd
# create dataframe
df = pd.DataFrame(data=[['A', 4, 'Type 1'],
['A', 1, 'Type 1'],
['A', 3, 'Type 2'],
['A', 0, 'Type 1'],
['A', 12, 'Type 2'],
['B', 1, 'Type 1'],
['B', 3, 'Type 1'],
['B', 5, 'Type 2']],
columns=['Person', 'Days', 'Type'])
df['Under Day Limit'] = df['Days'] <= 3;
print df
df = df.groupby(['Person', 'Type']).agg(['count', 'sum'])
df['Percent under Day Limit'] = df['Under Day Limit']['sum'] / df['Days']['count']
print df
在
和人员
类型上设置索引
>=3天数的布尔数列
索引中的级别groupby
value\u计数(normalize=True)
格式稍微多一点
Days Under Day Limit Percent under Day Limit
count sum count sum
Person Type
A Type 1 3 5 3 2 0.666667
Type 2 2 15 2 1 0.500000
B Type 1 2 4 2 2 1.000000
Type 2 1 5 1 0 0.000000
df.set_index(['Person', 'Type']).Days.ge(3).groupby(level=[0, 1]).value_counts(True)
Person Type Days
A Type 1 False 0.666667
True 0.333333
Type 2 True 1.000000
B Type 1 False 0.500000
True 0.500000
Type 2 True 1.000000
Name: Days, dtype: float64
df.set_index(['Person', 'Type']).Days.rename('>= 3').ge(3) \
.groupby(level=[0, 1]).value_counts(True).unstack(fill_value=0)