gpt4 book ai didi

python - 设置基于数据框列值的值计数和分组依据

转载 作者:太空宇宙 更新时间:2023-11-04 02:19:02 24 4
gpt4 key购买 nike

问题:

我有一个基本的 python/pandas 数据框,带有一个单元 ID(“Sarzs_no”)和一个基于一天中时间的列(“Time_of_day”,两个值:白天/晚上)。

enter image description here

不幸的是,一天中的时间是明确的,一个单位可以包含两个值(白天和黑夜)。但是它应该只包含一个。

我想要一个解决方案,可以根据白天和黑夜的计数来更改每个单元的时间值。如果它的天数多于所有值的天数,则应将其设置为天数,反之亦然。

enter image description here

我试图针对这个问题制定一个公式:

def dayoftime(napszak_str):
sarzs = row["Sarzs_no"]
day = bfdataf[bfdataf["Sarzs_no"]==sarzs].groupby("Time_of_day").size()[0]
night = bfdataf[bfdataf["Sarzs_no"]==sarzs].groupby("Time_of_day").size()[0]
if day>=night:
return "day"
else:
return "night"

...然后调用它:

bfdataf["new_tod"] = bfdataf["Time_of_day"].apply(dayoftime)

但不幸的是,我收到“索引超出范围”错误。

你能帮我解决这个问题吗?

谢谢!

最佳答案

您可以通过 GroupBy.size 获得每组的计数, 用 join 创建 DataFrame最后通过 numpy.where 创建列:

df = bfdataf.groupby(['Sarzs_no','Time_of_day']).size().unstack(fill_value=0)
df = bfdataf.join(df, on='Sarzs_no')

bfdataf['new_tod'] = np.where(df['day'] >= df['night'], 'day', 'night')

另一种解决方案是过滤列并根据 transform 对每组的 sum 获取计数:

days = (bfdataf['Time_of_day'] =='day').groupby(bfdataf['Sarzs_no']).transform('sum')
nights = (bfdataf['Time_of_day'] =='night').groupby(bfdataf['Sarzs_no']).transform('sum')

bfdataf['new_tod'] = np.where( days >= nights, 'day', 'night')

另一个解决方案,感谢@Jon Clements 是使用 idxmax对于助手 Series 并通过 map 创建新列:

s = bfdataf.groupby(['Sarzs_no','Time_of_day']).size().unstack(fill_value=0).idxmax(axis=1)
bfdataf['new_tod'] = bfdataf['Sarzs_no'].map(s)
print (bfdataf)
Sarzs_no Time_of_day new_tod
0 101/16 day day
1 101/16 day day
2 101/16 day day
3 101/16 day day
4 101/16 day day
5 101/16 night day
6 101/16 night day
7 101/16 night day
8 101/17 night night
9 101/17 night night
10 101/17 night night
11 101/17 night night
12 101/17 night night
13 101/17 night night
14 101/17 night night
15 101/17 night night
16 101/17 night night
17 101/17 night night
18 101/17 day night

关于python - 设置基于数据框列值的值计数和分组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52024271/

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