pandas 在同一张表(相同的数据框)中,如何用新名称和其他行值的总和对不同的行进行分组
Posted
技术标签:
【中文标题】pandas 在同一张表(相同的数据框)中,如何用新名称和其他行值的总和对不同的行进行分组【英文标题】:pandas in same table (same dataframe), how to group different rows with new name and with sum of other row values 【发布时间】:2020-04-19 21:33:40 【问题描述】:below dataframe is the output of below code i want to group rows further
train=pd.read_excel("monthly_report.xlsx", sheet_name="xy12",sep=r'\s*,\s*')
train['Date/Time Opened']=train['Date/Time Opened'].dt.month_name()
train=train.groupby(['col1', 'Date/Time Opened'])['Date/Time Opened'].count()
col1 Date/Time Opened number
abc April 40
August 30
December 25
February 30
January 45
xyz April 1
August 1
November 3
October 2
September 3
pqr March 2
May 4
November 5
October 2
现在我希望上面的格式如下所示。此后,基于此我想构建图表
abcxyz(new name) April 41
August 31
December 25
February 30
January 45
September 3
November 3
October 2
pqr(new name)
March 2
May 4
November 5
October 2
有人可以告诉我如何将新行中具有不同值的行和其余行值的总和连接起来
【问题讨论】:
【参考方案1】:您可以使用Series.mask
和Series.isin
设置相同的类别:
train['col1'] = train['col1'].mask(train['col1'].isin(['abc','xyz']), 'abcxyz')
或将Series.replace
与字典一起使用:
train['col1'] = train['col1'].replace('abc':'abcxyz','xyz':'abcxyz')
...然后使用您的解决方案:
train['Date/Time Opened']=train['Date/Time Opened'].dt.month_name()
train=train.groupby(['col1', 'Date/Time Opened'])['Date/Time Opened'].count()
【讨论】:
以上是关于pandas 在同一张表(相同的数据框)中,如何用新名称和其他行值的总和对不同的行进行分组的主要内容,如果未能解决你的问题,请参考以下文章