【问题标题】:Creating a new dataframe from a multi index dataframe using some conditions使用某些条件从多索引数据帧创建新数据帧
【发布时间】:2020-10-16 16:49:32
【问题描述】:

我有一个时间序列数据集,基本上是过去 5 年的材料消耗数据

Material No Consumption Date    Consumption
A           2019-06-01          1
A           2019-07-01          2
A           2019-08-01          3
A           2019-09-01          4
A           2019-10-01          0
A           2019-11-01          0
A           2019-12-01          0
A           2020-01-01          1
A           2020-02-01          2
A           2020-03-01          3
A           2020-04-01          0
A           2020-05-01          0
B           2019-06-01          0
B           2019-07-01          0
B           2019-08-01          0
B           2019-09-01          4
B           2019-10-01          0
B           2019-11-01          0
B           2019-12-01          0
B           2020-01-01          4
B           2020-02-01          2
B           2020-03-01          8
B           2020-04-01          0
B           2020-05-01          0

从上面的数据框中,我想查看材料至少消耗 1 个单位的月数。输出数据框应如下所示。

Material no_of_months(Jan2020-May2020) no_of_months(Jun2019-May2020)
A        3                             7
B        3                             4

目前我正在对数据框进行子设置并使用 group by 来计算具有非零消耗的唯一条目。但是,这需要为不同时期创建多个数据帧,然后将它们合并。想知道这是否可以使用字典以更好的方式完成。

consumption_jan20_may20 = consumption.loc[consumption['Consumption Date']>='2020-01-01',['Material No','Consumption Date','Consumption']]
consumption_jan20_may20 = consumption_jan20_may20.groupby([pd.Grouper(key='Material No'),grouper])['Consumption'].count().reset_index()
consumption_jan20_may20 = consumption_jan20_may20.groupby('Material No').count().reset_index()
consumption_jan20_may20.columns = ['Material No','no_of_months(Jan2020-May2020)','dummy']
consumption_jan20_may20 = consumption_jan20_may20[['MATNR','no_of_months(Jan2020-May2020)']]

【问题讨论】:

  • 你尝试了什么?
  • 你能解释一下你是如何得出预期输出的吗?
  • 目前我正在对数据框进行子设置并使用 groupby 来计算具有非零消耗的唯一条目。但是,这需要为不同时期创建多个数据帧,然后将它们合并。想知道这是否可以使用字典以更好的方式完成。
  • 您所遵循的方法似乎很合适。在某些时候,您将不得不根据您想要的日期拆分您的数据框。您可以手动执行此操作,也可以通过循环运行来实现。如果您的日期不超过 5-6 个间隔,我建议您手动运行并在最后连接所有 dfs。

标签: python pandas dataframe time-series


【解决方案1】:

您可以首先限制您正在调查的数据(将其限制在几个月的范围内)。假设您要检查前 5 个月的数据:

df = df[:6]

那么你可以使用下面的代码来查找材料使用量不为零的月份:

df_nonezero = df[df['Consumption']!=0]

如果要查看多少个月的消耗不为零,可以简单的确定新数据帧的长度:

len(df_nonezero)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 2022-08-12
    • 2017-12-15
    • 2021-12-13
    • 1970-01-01
    • 2019-08-12
    相关资源
    最近更新 更多