gpt4 book ai didi

python - 通过以下方式获取满足 Pandas 组内条件的值的百分比

转载 作者:行者123 更新时间:2023-11-28 22:33:52 25 4
gpt4 key购买 nike

我有一个包含PeopleDaysTypes 的数据框。数据并没有真正意义,这只是一个例子。

我想先对 People 进行分组,然后对 Type 进行分组,然后找到小于或等于 3 的天数百分比。

为了做到这一点,我创建了一个 Boolean 列,时间等于或少于 3 天。然后应用 countsum 聚合。我不太喜欢这种方法,因为我真的只需要 Days 列的 countUnder 的 sum Day Limit 列。此方法实质上是创建了两个不必要的列并创建了许多额外的步骤。我怎样才能清理这段代码,以便它在我更大的数据集上更有效地运行。

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

输出:

               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

最佳答案

  • set_index PersonType
  • Days 的 bool 系列 >= 3
  • groupby 索引级别
  • value_counts(normalize=True)

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)

enter image description here

关于python - 通过以下方式获取满足 Pandas 组内条件的值的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39515589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com