【发布时间】:2022-02-11 02:18:06
【问题描述】:
我正在使用一个有 20 个 ID 的数据框,每个 ID 大约有 10-15 个商店,每个商店都分配了一个状态(零、负和正)。
数据:
data =
ID STORE STATUS
100001 1 zero
100001 2 positive
100001 3 zero
100001 4 negative
100001 5 zero
100001 6 zero
100001 7 positive
100001 8 negative
....
问题:
我想知道每个 id 有多少商店是零/正/负。
我的尝试:
zero = 0
for item in data['ID'].unique():
items = data[data['ID']==item]
lenght = len(items)
print(lenght)
for index, i in items.iterrows():
if i['STATUS'] == 'Zero':
zero += 1
pct = zero/lenght
items['PCT'] = zero/lenght
print(items)
我上面代码的结果:
ID STORE STATUS. PCT
100001 1 zero 0.5
100001 2 positive 0.5
100001 3 zero 0.5
100001 4 negative 0.5
100001 5 zero 0.5
100001 6 zero 0.5
100001 7 positive 0.5
100001 8 negative 0.5
预期结果:
ID STORE STATUS. PCT
100001 1 zero 0.5
100001 2 positive 0.25
100001 3 zero 0.5
100001 4 negative 0.25
100001 5 zero 0.5
100001 6 zero 0.5
100001 7 positive 0.25
100001 8 negative 0.25
【问题讨论】:
-
如果你在 pands 中使用显式循环,你经常做错事。使用其内置的分组方法。
-
不知道这是不是你要找的东西:stackoverflow.com/questions/50169311/…
-
谢谢@Mark,帮了大忙。
标签: python pandas dataframe loops pandas-groupby