基于列,将pandas中的数据框行合并

10

我是pandas的新手。我有一个数据框,看起来像这样

sitename            name        date               count
0  chess.com  Autobiographer  2012-05-01               2
1  chess.com  Autobiographer  2012-05-05               1
2  chess.com  Autobiographer  2012-05-15               1
3  chess.com  Autobiographer  2012-05-01               1
4  chess.com  Autobiographer  2012-05-15               1
5  chess.com  Autobiographer  2012-05-01               1

如何基于日期合并行并对相同日期的计数求和。就像在SQL中一样。

select sitename, name, date count(*) from table group by date

1
http://pandas.pydata.org/pandas-docs/stable/groupby.html - felipsmartins
我使用了 df = dataframe.groupby('date')。但是出现了错误 pandas.core.groupby.DataFrameGroupBy object at 0x7f0d2de6f9d0> <pandas.core.groupby.DataFrameGroupBy object at 0x32bdb90>。 - user3527975
1
@user3527975:那不是错误。当你打印它时,那只是groupby对象的样子:你想对它执行一些操作(比如选择一个列,或者执行求和等)。 - DSM
@DSM:谢谢。是的,我想根据日期进行求和。但是我希望更新后的数据框中保留所有列。 - user3527975
@DSM:我在这个网站上发布了另一个问题 - http://stackoverflow.com/questions/23901459/adding-inserting-values-in-pandas-dataframe-based-on-1-or-more-columns。这个问题还没有得到解决。你有什么想法吗? - user3527975
2个回答

14

如果您想在数据框中保留站点名称和姓名,可以执行以下操作:

df = dataframe.groupby(['date', 'sitename', 'name']).sum()

编辑:参见@DSM的评论,以重置索引并获得一个未索引的数据帧。


这个完美地运行了。感谢节省时间。我一直在编写函数并执行数据框的应用。 - user3527975
这将网站名称、日期和名称组合为一个单独的列。但这些必须是单独的列。有什么建议吗? - user3527975
3
@user3527975:不,它并没有。你可能将索引(在这种情况下是多重索引)与列混淆了。您可以添加.reset_index(),或在groupby中添加as_index=False,例如 groupby(["date", "sitename", "name"], as_index=False).sum() - DSM
@DSM:我应该说它结合了站点名称、日期和名称,并将其用作索引。as_index = False可以完成这项工作。谢谢。 - user3527975

0
df = dataframe.groupby('date').sum()

这个只是在数据框中保留日期和总和。而期望的结构就像帖子中所述。 - user3527975
你可以添加列,然后如果想要打印结果并保留标题/列,请添加此内容:, header=True, index=True) - Datacrawler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接