在两个单独的列上聚合数据帧

2024-04-19 10:49:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试对以下数据帧上的字段cat1, cat2, cat3进行聚合。我需要count the number of trials和每个组中的number of unique subjects。下面的代码确实发现试验次数正确,但受试者人数不正确。你知道吗

mydata = pd.DataFrame(np.array([
         ['Adam', 1L, 1L, 1L, 1L],
         ['Adam', 2L, 1L, 2L, 1L],
         ['Adam', 3L, 2L, 2L, 3L],
         ['Adam', 1L, 1L, 1L, 1L],
         ['Adam', 2L, 1L, 1L, 2L],
         ['Adam', 3L, 1L, 2L, 1L],
         ['Bob', 1L, 1L, 2L, 3L],
         ['Bob', 2L, 1L, 2L, 3L],
         ['Bob', 3L, 1L, 1L, 1L],
         ['Bob', 1L, 1L, 2L, 3L],
         ['Bob', 2L, 2L, 2L, 3L],
         ['Bob', 3L, 1L, 3L, 1L]], dtype=object),
         columns = ['ID','trial','cat1','cat2','cat3']
        )

grouped = mydata.groupby(['cat1', 'cat2', 'cat3']).agg(['count'])

grouped.reset_index()

结果:

   cat1  cat2  cat3     ID  trial
                     count  count
0     1     1     1      3      3
1     1     1     2      1      1
2     1     2     1      2      2
3     1     2     3      3      3
4     1     3     1      1      1
5     2     2     3      2      2

我期待的结果是:

   cat1  cat2  cat3  trial  ID
0     1     1     1      3   2
1     1     1     2      1   1
2     1     2     1      2   1
3     1     2     3      3   1
4     1     3     1      1   1
5     2     2     3      2   2

Tags: ofthe数据idnumbercountbobtrial
1条回答
网友
1楼 · 发布于 2024-04-19 10:49:57

你可以用pd.Series.nuniqueIDaggregate,从trail得到count

In [215]: (mydata.groupby(['cat1', 'cat2', 'cat3'])
                .agg({'ID': pd.Series.nunique, 'trial': 'count'})
                .reset_index())
Out[215]:
   cat1  cat2  cat3  trial  ID
0     1     1     1      3   2
1     1     1     2      1   1
2     1     2     1      2   1
3     1     2     3      3   1
4     1     3     1      1   1
5     2     2     3      2   2

相关问题 更多 >