Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 需要在数据帧中聚合计数(rowid,colid)_Python_Numpy_Pandas - Fatal编程技术网

Python 需要在数据帧中聚合计数(rowid,colid)

Python 需要在数据帧中聚合计数(rowid,colid),python,numpy,pandas,Python,Numpy,Pandas,我一直在努力扭转这种局面 | row_id | col_id | |--------|--------| | 1 | 23 | | 4 | 45 | | ... | ... | | 1 | 23 | | ... | ... | | 4 | 45 | | ... | ... | | 4 | 45 | | ... | ... | 进入这个 | row_id |

我一直在努力扭转这种局面

| row_id | col_id |
|--------|--------|
|   1    |   23   |
|   4    |   45   |
|  ...   |  ...   |
|   1    |   23   |
|  ...   |  ...   |
|   4    |   45   |
|  ...   |  ...   |
|   4    |   45   |
|  ...   |  ...   |
进入这个

| row_id | col_id |  count  |
|--------|--------|---------|
|   1    |   23   |    2    |
|   4    |   45   |    3    |
|  ...   |  ...   |   ...   |
因此,所有(第i行、第j列)出现的情况都被添加到“计数”列中。请注意,在这两种情况下,行id和列id都不是唯一的

现在成功到现在,至少如果我想保持效率的话。我可以对每一对进行迭代,并将出现的次数相加,但在pandas或numpy中必须有一种更简单的方法

谢谢

编辑1:

正如@j-bradley所建议的,我尝试了以下方法

# I use django-pandas
rdf = Record.objects.to_dataframe(['row_id', 'column_id'])
_ = rdf.groupby(['row_id', 'column_id'])['row_id'].count().head(20)
_.head(10)
这就产生了

    row_id  column_id
1       108          1
        168          1
        218          1
        398          2
        422          1
10      35           2
        355          1
        489          1
100     352          1
        366          1
Name: row_id, dtype: int64
这似乎还可以。但它是一个系列对象,我不知道如何将其转换为具有所需三列的数据帧。看起来,熊猫是一种动物。有什么建议吗


再次感谢。

您可以按a列和b列分组,并在分组对象上调用
count

df =pd.DataFrame({'A':[1,4,1,4,4], 'B':[23,45,23,45,45]})
df.groupby(['A','B'])['A'].count()
返回:

A  B 
1  23    2
4  45    3
编辑以使答案更明确

要将
系列
返回到名为count的列的
数据帧

_ = df.groupby(['A','B'])['A'].count()
序列的名称将成为列名:

_.name = 'Count'
重置索引,将多索引升级为列,并将系列转换为数据帧:

df =_.reset_index()

嗨,我试过了,但我觉得没用。我将把它添加到我的问题中,以便您可以看到我的输出和过程。好的,将我的输出添加到问题中。您的建议在提供我所需的信息方面效果很好,但我仍然无法将此Series对象转换为所需的DataFrame。好的,准备好将
s=pd.Series()
转换为
pd.DataFrame
,让您大开眼界吧。你准备好了吗?!因为它在这里:
df=pd.DataFrame