微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用组的最小/最大日期为 Pandas 中的组添加缺失的日期

如何解决使用组的最小/最大日期为 Pandas 中的组添加缺失的日期

我有一个数据集,其中包含给定公司在给定月份的销售额和利润。在某些月份,公司将不开展任何业务,因此该月份的数据中会丢失该数据。我想为这些缺失的月份创建行,并用 0 填充金额/利润变量。

重现数据的代码

import pandas as pd
import numpy as np
import itertools
from datetime import datetime

np.random.seed(2021)

company_list = ['Company_A','Company_B','Company_C']
datelist = pd.date_range(start="2020-01-01",end='2020-08-01',freq='MS').to_list()

df = pd.DataFrame(list(itertools.product(company_list,datelist)))
df.columns = ['Company','Date']

df['Amount'] = np.random.choice(range(0,10000),df.shape[0])
df['Profit'] = np.random.choice(range(0,df.shape[0])

df['Date'] = df['Date'] + pd.tseries.offsets.MonthEnd(1)

df = df.drop([0,1,5,10,11,15,16,17,22,23]).reset_index(drop=True) #Dropping some rows just to illustrate what my data looks like

df

enter image description here

我已经使用我在此 post 中找到的帮助弄清楚了如何执行此操作,但是它使用“日期”列中所有日期的最小/最大范围。因为对我公司的观察开始和结束的时间不同,这增加了我第一次观察它们之前和它们从数据中消失之后的日期,这不是我想要的。

df.set_index(
    ['Date','Company']
).unstack(
    fill_value = 0
).asfreq(
    'M'
).stack().sort_index(level=1).reset_index()

enter image description here

我想要的是只添加由特定组的最小/最大日期导致的缺失日期,即只添加介于两者之间的日期,而不是末尾的日期。

数据的外观:

enter image description here

解决方法

这样做就行了:

df.drop_duplicates(
  ['Date','Company'],'last'
).groupby('Company').apply(
  lambda x: x.set_index('Date').asfreq('M',fill_value = 0)
).drop('Company',axis = 1).reset_index()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?