[英]pandas - how to organised dataframe based on date and assign new values to column
[英]Adding a new column to a pandas dataframe based on data organised by groupby
我有以下数据框:
>>> df.head()
id date seizure_type note date_column
0 4 2021-10-01 16:35:00 Mild None 2021-10-01
1 5 2021-10-02 16:45:00 Medium Wet 2021-10-02
2 6 2021-10-02 22:55:00 Medium None 2021-10-02
3 7 2021-10-03 08:30:00 Strong None 2021-10-03
4 8 2021-10-06 19:30:00 Strong Been brewing all day 2021-10-06
我正在尝试计算每天每个癫痫类型的值并使用此数据创建一个新列。 以下产生了我需要的东西:
data = df.groupby(['date_column'])['seizure_type'].count()
date_column
2021-10-01 1
2021-10-02 2
2021-10-03 1
2021-10-06 1
2021-10-07 1
但我不知道如何将此数据作为新列添加到现有数据框中。
我试图像这样添加列:
df['freq'] = data
但 freq 列不起作用并产生以下结果:
id date seizure_type note date_column freq
0 4 2021-10-01 16:35:00 Mild 2021-10-01 NaN
1 5 2021-10-02 16:45:00 Medium Wet 2021-10-02 NaN
2 6 2021-10-02 22:55:00 Medium 2021-10-02 NaN
3 7 2021-10-03 08:30:00 Strong 2021-10-03 NaN
4 8 2021-10-06 19:30:00 Strong Been brewing all day 2021-10-06 NaN
我觉得答案正盯着我的脸,但我看不到它。
not_speshal 上面给出的答案最终并不是我想要的。 我意识到我正在尝试将 groupby 对象转换为数据帧,并发现最好的方法是使用 .to_frame 然后使用 .reset_index() 重置索引
frequency_count = df.groupby(['date_column'])['seizure_type'].value_counts().to_frame(name='frequency').reset_index()
使用transform
:
df["freq"] = df.groupby('date_column')['seizure_type'].transform("count")
>>> df
id date seizure_type note date_column freq
0 4 2021-10-01 16:35:00 Mild None 2021-10-01 1
1 5 2021-10-02 16:45:00 Medium Wet 2021-10-02 2
2 6 2021-10-02 22:55:00 Medium None 2021-10-02 2
3 7 2021-10-03 08:30:00 Strong None 2021-10-03 1
4 8 2021-10-06 19:30:00 Strong Been brewing all day 2021-10-06 1
顺便说一句,您似乎创建了“date_column”列只是为了在groupby
使用。 你不需要这样做。 你可以简单地使用:
df["freq"] = df.groupby(df["date"].dt.date)['seizure_type'].transform("count")
>>> df
id date seizure_type note freq
0 4 2021-10-01 16:35:00 Mild None 1
1 5 2021-10-02 16:45:00 Medium Wet 2
2 6 2021-10-02 22:55:00 Medium None 2
3 7 2021-10-03 08:30:00 Strong None 1
4 8 2021-10-06 19:30:00 Strong Been brewing all day 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.