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.maskSeries.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 在同一张表(相同的数据框)中,如何用新名称和其他行值的总和对不同的行进行分组的主要内容,如果未能解决你的问题,请参考以下文章

如何用dict pandas python替换分组数据框

如何用通配符比较同一张表中的两条记录?

如何用SQL语句查询两张表中的相同字段数据

在 Pandas 数据框中查找和替换子字符串忽略大小写

如何用同一数据框中其他列的实际列值替换一列中的字符串值?

如何用随机字典值填充熊猫数据框列