我一直在努力改变这个
| 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 |
| ... | ... | ... |因此,所有(row_i,col_j)事件都被添加到“count”列中。请注意,在任何一种情况下,row_id和column_id都不会是唯一的。
现在成功到现在为止,至少如果我想保持效率。我可以对每一对进行迭代,并将发生的次数加起来,但是熊猫必须有一个更简单的方法--或者说这件事上很难处理。
谢谢!
编辑1:
正如@ suggested建议的那样,我尝试了以下方法
# 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这似乎没问题。但是它是一个Series对象,我不知道如何将它转换为包含所需的三列的dataframe。就像看上去的那样,熊猫是菜鸟。有小费吗?
再次感谢。
发布于 2015-01-29 07:29:16
您可以按列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编辑以使答案更加明确的
若要将series返回到具有名为count的列的dataframe:
_ = df.groupby(['A','B'])['A'].count()该系列的名称变为列名:
_.name = 'Count'重置索引,将多个索引提升为列,并将系列转换为数据:
df =_.reset_index()https://stackoverflow.com/questions/28208958
复制相似问题