简体   繁体   English

Pandas GroupBy Total Row for Days of the week,然后只对一列求和

[英]Pandas GroupBy Total Row for Days of the Week, then sum only on one column

I attempted this by:我尝试这样做:

df = {
'inc_date':['06-Jul-2020','06-Jul-2020','06-Jul-2020','07-Jul-2020','08-Jul-2020','08-Jul-2020','09-Jul-2020',],
}
df = pd.DataFrame(dict(df))
df['inc_Day_of_Week'] = pd.DatetimeIndex(df['inc_date']).day_name() # Create ddd of the INC
print(df)

dfTemp = df.groupby(['inc_Day_of_Week']).size()
dfTemp = dfTemp.reset_index(name='inc_volume').sort_index()
# Add sorting so days of week appear Mon-Fri
cats = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
dfTemp['inc_Day_of_Week'] = pd.Categorical(dfTemp['inc_Day_of_Week'], categories=cats, ordered=True)
dfTemp.loc['Total'] = dfTemp.sum(numeric_only=True)
display(dfTemp)
print("", end='\n')

    inc_Day_of_Week inc_volume
0   Monday          3.0
1   Thursday        1.0
2   Tuesday         1.0
3   Wednesday       2.0
Total   NaN         7.0

This is whats required except for the NaN ie How to remove the NaN only sum on the one column?这是除了NaN之外所需的内容,即如何仅删除一列上的NaN总和?

Total           7.0

I tried to append but this does fail:我试图追加,但这确实失败了:

dfTotal1 = [[dfTemp.inc_volume.sum()]]
dfTotal2 = pd.DataFrame(dfTotal1,columns=['inc_volume'])
dfTemp.append(dfTotal2)

Replacing NaN values with "" should solve your query.""替换NaN值应该可以解决您的查询。 After you add the Total row to the dfTemp DataFrame, add this line of codeTotal行添加到dfTemp DataFrame 后,添加这行代码

CODE代码

dfTemp.fillna(value="", inplace=True)

If you want to avoid calculating sum on categorical variables directly,如果您想避免直接计算分类变量的总和,

dfTotal = pd.DataFrame({"inc_Day_of_Week": "", "inc_volume": dfTemp.inc_volume.sum()}, index=["Total"])
dfTemp = pd.concat([dfTemp, dfTotal])

OUTPUT输出

          inc_Day_of_Week  inc_volume
0              Monday         3.0
1            Thursday         1.0
2             Tuesday         1.0
3           Wednesday         2.0
Total                         7.0

You can also try this,你也可以试试这个

import pandas as pd

df = {
'inc_date':['06-Jul-2020','06-Jul-2020','06-Jul-2020','07-Jul-2020','08-Jul-2020','08-Jul-2020','09-Jul-2020',],
}
df = pd.DataFrame(dict(df))
df['inc_Day_of_Week'] = pd.DatetimeIndex(df['inc_date']).day_name()
df = pd.DataFrame(df.groupby('inc_Day_of_Week').count()).reset_index()
df.loc['Total'] = df.sum(numeric_only=True)
df.fillna(value='',inplace=True)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM