我是python的新手(以及堆栈溢出!)所以希望这是有道理的!
我有一个包含年份和名称的数据框(在其他部分中,但这是我有兴趣使用的全部内容)。
我已经完成df = df.groupby(['year', 'name']).size()
以获得每个名字每年出现的次数。
它返回类似于此的内容:
year name
2001 nameone 2
2001 nametwo 3
2002 nameone 1
2002 nametwo 5
我要做的是将大小数据放入名为“count”的新列中。 (最终我打算用这个来绘制图表)
非常感谢任何帮助!
这是原始代码(为方便起见我稍微简化了一下):
hso_df = pd.read_csv('HibernationSurveyObservationsCleaned.csv')
hso_df[["startDate", "endDate", "commonName"]]
year_df = hso_df
year_df['startDate'] = pd.to_datetime(hso_df['startDate'] )
year_df['year'] = year_df['startDate'].dt.year
year_df = year_df[["year", "commonName"]].sort_values('year')
year_df = year_df.groupby(['year', 'commonName']).size()
here is an image of the first 3 rows of the data displayed with .head()
此数据中唯一感兴趣的列是commonName和year(我从startDate获取此值)
答案 0 :(得分:0)
IIUC你希望transform
添加groupby的结果,其索引与原始df对齐:
df['count'] = df.groupby(['year', 'name']).transform('size')
修改强>
根据您的要求,我建议在reset_index
结果上调用groupby
,然后将其合并回主df:
year_df= year_df.reset_index()
hso_df.merge(year_df).rename(columns={0:'count'})