python - 如何从每月数据中查找月份差距计数?

标签 python pandas dataframe

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

name,date
AAA,201705
AAA,201706
AAA,201707
AAA,201708
AAA,201710
AAA,201711
AAA,201802
AAA,201803
AAA,201804
AAA,201805
AAA,201806
AAA,201807

在此数据框中有两列可用,即名称和日期。在日期列中,只有年和月,格式为 yyyymm。

在日期列值中,201709、201712 和 201801 月份不可用。

需要检查所有月份是否存在。如果任何月份不可用,则需要以下格式的输出:

name,start_date,end_date,count
AAA,201709,201709,1
AAA,201712,201801,2

我正在尝试使用pandas diff function

最佳答案

使用asfreq :

#convert column to datetimes
df['date'] = pd.to_datetime(df['date'], format='%Y%m')
# get missing values by asfreq
a = df.set_index('date').groupby('name')['name'].apply(lambda x: x.asfreq('MS'))
#filter only NaNs consecutive rows
b = a.notnull().cumsum()[a.isnull()].reset_index(name='g')

#aggregate first, last and count
d = {'date':['first','last'],'name':['first', 'size']}
df = b.groupby('g').agg(d).reset_index(drop=True)
#data cleaning
df.columns = df.columns.map('_'.join)
df = df.rename(columns={'date_first':'start_date', 
                        'date_last':'end_date', 
                        'name_first':'name', 
                        'name_size':'count'})
print (df)
  start_date   end_date name  count
0 2017-09-01 2017-09-01  AAA      1
1 2017-12-01 2018-01-01  AAA      2

详细信息:

print (a)
name  date      
AAA   2017-05-01    AAA
      2017-06-01    AAA
      2017-07-01    AAA
      2017-08-01    AAA
      2017-09-01    NaN
      2017-10-01    AAA
      2017-11-01    AAA
      2017-12-01    NaN
      2018-01-01    NaN
      2018-02-01    AAA
      2018-03-01    AAA
      2018-04-01    AAA
      2018-05-01    AAA
      2018-06-01    AAA
      2018-07-01    AAA
Name: name, dtype: object

关于python - 如何从每月数据中查找月份差距计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51040611/

相关文章:

python - 如何在散点图中解释相同的数据点?

python - 如何将每个 Pandas Data Frame 行转换为包含列值作为属性的对象?

python - 如何在 Networkx 图中生成组件 ID?

python - 在 Python 中用一行写一个阶乘函数

python - 如何在装饰器记录器中获取 flask 的请求?

python - 如果其中一个列值为 1,如何使用 groupby 并应用 DataFrames 将组列中的所有值设置为 1?

python - 如何在 Pandas 的同一列中将每个值与项目的最大值进行比较

python - 将系列索引设置为另一个具有更多级别的索引

python - 仅从 python 中的 td 选择价格值

python - 在 Python 中模拟 ImportError