Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python数据框架:按日期分组和按类型求和_Python_Dataframe_Pandas Groupby - Fatal编程技术网

Python数据框架:按日期分组和按类型求和

Python数据框架:按日期分组和按类型求和,python,dataframe,pandas-groupby,Python,Dataframe,Pandas Groupby,我有一个数据框架,我想根据日期(每天或每周)进行分组,并将两个不同类别的总数相加 data = {'Date' : ['2020-08-20','2020-08-20','2020-08-21','2020-08-21', '2020-08-22','2020-08-22'], 'Name' : ['Ben','Ben','Ben','Sam','Sam','Sam'], 'Sales ($)' : [10,5,2,5,6,7] }

我有一个数据框架,我想根据日期(每天或每周)进行分组,并将两个不同类别的总数相加

data = {'Date' : ['2020-08-20','2020-08-20','2020-08-21','2020-08-21',
        '2020-08-22','2020-08-22'],
        'Name' : ['Ben','Ben','Ben','Sam','Sam','Sam'],
        'Sales ($)' : [10,5,2,5,6,7]
       }

df=pd.DataFrame(data, columns = ['Date','Name','Sales ($)'])
所以它看起来像这样:

grouped_data = {'Date' : ['2020-08-20','2020-08-21','2020-08-22'],
               'Ben' : [15,2,0],
               'Sam' : [0,5,13],
               }

df=pd.DataFrame(grouped_data, columns = ['Date','Ben','Sam'])

这应该适合您:

df.groupby(['Date','Name']).sum().reset_index()
如果要添加每周、每日频率,请首先将日期列转换为日期时间:
df['Date']=pd.to_datetime(df['Date'])
然后,您可以在此处添加频率(
W
用于每周,
D
用于每天..)


df.groupby([pd.Grouper(key=“Date”,freq=“D”),'Name']).sum().reset_index()

第一个groupby
'Date'
'Name'

df.groupby(['Date', 'Name']).sum().unstack(-1).replace(
    np.nan, 0).droplevel(axis=1, level=0)
然后获取
unstack
将名称(在最后一个索引级别)设置为列,
np.nan
替换为零,最后将
droplevel
从列中删除
'Sales($)

结果如下:

# Out:
Name         Ben   Sam
Date                  
2020-08-20  15.0   0.0
2020-08-21   2.0   5.0
2020-08-22   0.0  13.0

假设您希望按周或月进行分组,我建议将
'Date'
列解析为
datetime

df['Date_dt'] = pd.to_datetime(df['Date'])
现在,您可以每周或每月提取约会石斑鱼:

# weekly grouper
date_grouper = df['Date_dt'].dt.week
# monthly grouper
date_grouper = df['Date_dt'].dt.month
并使用此grouper获得每周/每月分组:

df.groupby([date_grouper, 'Name']).sum().unstack(-1).replace(
    np.nan, 0).droplevel(axis=1, level=0)
当然,将
'Date'
列替换为新的datetime日期也可以将其设置为索引。但是当将其设置为索引时,您必须忽略访问
dt
属性,f.i.
date\u gropper=df.index.week


将日期解析为
datetime
还允许使用其他分组,例如
day
dayofweek
dayofyear
hour
minute
second
这是一项工作,
pd.pivot\u表(df,index=[“date”],value=[“Sales($)”),columns=[“Name”],aggfunc=[sum])。fillna(0.0)
So。。。有用吗?太好了,谢谢。是否可以更进一步——当我有一个月又一个月的数据时,我可以做同样的事情,但按周或月分组吗?使用Grouper功能?不客气!当然,那应该很容易。你能在你的问题中添加一些每月分组的样本数据吗?