我有一个像这样的DataFrame:
item_id revenue month year
1 10.0 01 2014
1 5.0 02 2013
1 6.0 04 2013
1 7.0 03 2013
2 2.0 01 2013
2 3.0 03 2013
3 5.0 04 2013
我尝试获取2013年1月至2013年3月每个项目的收入,就像下面的DataFrame:
item_it revenue year
1 12.0 2013
2 5.0 2013
3 0 2013
但是,我对如何在Pandas中实现它感到困惑。任何帮助将不胜感激。
答案 0 :(得分:3)
您可以先切片,然后然后 groupby
和reindex
进行切片,以包含0
个值。
month_start, month_end = 1, 3
year = 2013
res = df.loc[df['month'].between(month_start, month_end) & df['year'].eq(year)]\
.groupby('item_id')['revenue'].sum()\
.reindex(df['item_id'].unique()).fillna(0)\
.reset_index('revenue').assign(year=year)
print(res)
item_id revenue year
0 1 12.0 2013
1 2 5.0 2013
2 3 0.0 2013
答案 1 :(得分:0)
您可以先使用template <class... TArgs, class... TArgs2>
enable_if_t<is_invocable_v<void(TArgs...),TArgs2...>>
foo (void (*pFunc)(TArgs...), TArgs2... args)
{
pFunc (forward<TArgs2> (args)...);
}
然后使用groupby
方法来获取所需的输出。
sum