繁体   English   中英

根据 groupby 组织的数据向 Pandas 数据框添加新列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM