将.size()放入新列python pandas

时间:2016-07-01 09:56:48

标签: python pandas ipython

我是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获取此值)

1 个答案:

答案 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'})