如何基于熊猫中具有特定值的列将多行合并为一行

时间:2018-11-16 10:15:00

标签: python pandas dataframe pandas-groupby

我有一个像这样的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中实现它感到困惑。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

您可以先切片,然后然后 groupbyreindex进行切片,以包含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