【问题标题】:Groupby Product and Time and include zerosGroupby 产品和时间并包括零
【发布时间】:2021-01-02 02:46:21
【问题描述】:

我有一个如下所示的数据框:

ID     Product     Time
C561   PX          2017-01-01 
                   00:00:00
T801   PT          2017-01-01
                   00:00:01

我已经将时间格式转换为月份,以便使用此代码更好地处理:

df['Time'] = df['Time'].dt.to_period("M")

然后我想统计每个月某个特定产品的 ID 数量,并编写了以下代码:

df=df.groupby(['Time','Product'])['ID'].size().reset_index()

这导致了这样的数据框:

Time     Product   ID
01-2017  PX        2
02-2017  PX        3
02-2017  PT        2

我现在要添加的是在特定月份没有任何 ID 的产品的行。所以我想为此添加 0,例如:

Time     Product   ID
01-2017  PX        2
01-2017  PT        0
02-2017  PX        3
02-2017  PT        2

我该怎么做?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用.from_product() 创建新索引,然后使用.reimdex().fillna(0)

     n= pd.MultiIndex.from_product((df.Time.unique(),\
    df.Product.unique()), names=["Time", "Product"])
    
    
    
     df=df.set_index(["Time", "Product"]).reindex(n).fillna(0).reset_index()
    print(df)
    
    
    
    
       Time   Product  ID
    0  01-2017      PX  2.0
    1  01-2017      PT  0.0
    2  02-2017      PX  3.0
    3  02-2017      PT  2.0
    

    【讨论】:

      【解决方案2】:

      你可以使用unstack并用fill_value=0填充零,之后你可以再次使用stack

      df = df.groupby(['Time','Product'])['ID'].count().unstack(fill_value=0).stack()
      

      【讨论】:

        猜你喜欢
        • 2013-02-12
        • 2021-07-11
        • 2020-11-17
        • 2012-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-24
        相关资源
        最近更新 更多