【问题标题】:How to GroupBy a Dataframe in Pandas and keep whole fields in the output如何在 Pandas 中对数据框进行分组并将整个字段保留在输出中
【发布时间】:2018-11-22 06:51:41
【问题描述】:

我想要基于三列的组,但将原始列保留在输出中(6 列)。

这个link实际上并没有帮助我。它只有三列,并根据这三列进行分组。

这是我的original 数据框示例:

   Clinic Number  Question Text  Answer Text Answer Date     year  month dayofyear
1       1        bathing            No    2006/7/1     2006    1         7
2       1        dressing           No    2006/7/1     2006    1         7
3       1        feeding            NO    2006/7/1     2006    1         7
4       1        housekeeping       No    2006/7/1     2006    1         7
5       1        medications        No    2006/7/1     2006    1         7
6       2        bathing            No    2006/1/1     2006    1         1
7       2        dressing           Yes   2006/1/1     2006    1         1
8       2        feeding            Yes   2006/1/1     2006    1         1
9       2        housekeeping       Yes   2006/1/1     2006    1         1
10      2        medications        No    2006/1/1     2006    1         1

我想按[clinicNumber,Answer Text, Year,month]分组, 但我需要其他列,例如Answer Date and question Text, yearOfday 列,因为稍后我想对它们进行一些计算。

我做了什么: 这是我在这个数据框上使用的组来实现我的目标。问题是输出中没有Answer date ,yearofyear ...

grouped = data.groupby(['Clinic Number','year','month','Answer Text']).size().reset_index(name='counts')

这个group by的输出是这样的:

 Clinic Number    year   month   Answer Text  counts
0         1       1999     5          No       6
1         1       2000    10          No       6
2         1       2000     2          No       6
3         1       2001     9          Yes       6
4         1       2002     2          Yes       8
5         1       2003     2          No       8
6         1       2004     4          No       8
7         1       2014     6          No       2
8         1       2015    10          No       2
5         2       2003     2          No       8
6         2       2004     4          No       8
7         2       2014     6          No       2
8         2       2015    10          No       2

任何帮助表示赞赏:)

【问题讨论】:

    标签: python pandas dataframe group-by data-analysis


    【解决方案1】:

    IIUC,使用 groupbytransform 并将其设置为现有数据框中的新列。

    data['counts'] = (data.groupby(['Clinic Number',
                                    'year',
                                    'month',
                                    'Answer Text'])['Clinic Number']
                          .transform('size'))
    
    data = data.sort_values(['Client Number','Answer Date'])
    

    输出:

        Clinic Number Question Text Answer Text Answer Date  year  month  dayofyear  counts
    1               1       bathing          No    2006/7/1  2006      1          7       4
    2               1      dressing          No    2006/7/1  2006      1          7       4
    3               1       feeding          NO    2006/7/1  2006      1          7       1
    4               1  housekeeping          No    2006/7/1  2006      1          7       4
    5               1   medications          No    2006/7/1  2006      1          7       4
    6               2       bathing          No    2006/1/1  2006      1          1       2
    7               2      dressing         Yes    2006/1/1  2006      1          1       3
    8               2       feeding         Yes    2006/1/1  2006      1          1       3
    9               2  housekeeping         Yes    2006/1/1  2006      1          1       3
    10              2   medications          No    2006/1/1  2006      1          1       2
    

    【讨论】:

    • 聪明。为什么我没有考虑这种方法:|||
    • @sariaGoudarzi 谢谢。编码愉快!
    • 只有一件事@Scott Boston,现在我不能对此应用排序。这个排序代码和之前的代码有什么区别吗?我想按日期排序。谢谢你的时间:)
    • 不,排序应该完全相同。这是带有一个附加列的原始数据框。
    • 能否请您通过排序更新答案
    猜你喜欢
    • 1970-01-01
    • 2019-07-19
    • 2020-11-22
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 2017-08-11
    • 2018-11-07
    相关资源
    最近更新 更多