【发布时间】:2017-02-28 19:05:35
【问题描述】:
我想在使用 Python 的 melt 函数时重现行为或 R 的 aggregate 函数。
R中数据如下:
library("dplyr")
data <- summarise(group_by(table, project, resourcetype),
count = n_distinct(resource_id))
project resourcetype count
<fctr> <fctr> <int>
1 1000001 O 7
2 1000002 O 6
3 1000003 O 18
4 1000004 C 1
5 1000004 I 1
6 1000004 O 19
7 1000005 I 2
8 1000005 O 11
9 1000006 O 4
reshape(as.data.frame(data),
timevar = "resourcetype",
idvar = "project",
direction = "wide",
sep = "_")
project count_O count_C count_I
1 1000001 7 NA NA
2 1000002 6 NA NA
3 1000003 18 NA NA
4 1000004 19 1 1
7 1000005 11 NA 2
9 1000006 4 NA NA
现在,在 Python 中我得到:
import pandas as pd
data = table.groupby(['project', 'resourcetype'], as_index=False)\
.agg({'resource_id': {'count': 'nunique'}})
project resourcetype resource_id
count
0 1000001 O 7
1 1000002 O 6
2 1000003 O 18
3 1000004 C 1
4 1000005 I 1
5 1000006 O 19
6 1000007 I 2
7 1000008 O 11
8 1000009 O 4
我有多重索引,我希望用as_index=False 消除它。我在最后一列中有resource_id 和count,我只想在R 中使用count。
我试图在 Python 中使用 melt 函数,但无济于事。
编辑:原始数据是一个2000行19列的表格。
Edit2:关于多索引问题。
table.groupby(['project', 'resourcetype'])\
.agg({'resource_id': {'count': 'nunique'}}).reset_index()
project resourcetype resource_id
count
0 1000001 O 7
table.groupby(['project', 'resourcetype'])\
.agg({'resource_id': {'count': 'nunique'}})
resource_id
count
project resourcetype
1000001 O 7
我想得到的是:
project resourcetype count
0 1000001 O 7
【问题讨论】:
-
您使用的不是基本 R 而是另一个库的
dplyr行。请包括所有 R 库行。