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
。