首页 > 解决方案 > 按日期计数的 Pandas 列

问题描述

我有一个具有日期时间索引的数据框。我想添加一个包含当天行数的列。

dff = pd.DataFrame(['red','red','blue'],
    columns = ['colors'],
    index = [pd.Timestamp('2019-09-19 14:03:20'),pd.Timestamp('2019-09-19 17:03:20'),pd.Timestamp('2019-09-20 14:03:20')])

                    colors
2019-09-19 14:03:20 red
2019-09-19 17:03:20 red
2019-09-20 14:03:20 blue

因此,发生在 2019 年 9 月 19 日的行的“计数”列应为 2,最后一行的计数列应为 1。

标签: pandas-groupby

解决方案


这会临时创建一个仅包含日期的列,然后对所述列进行计数并将其放入实际数据框中称为计数的新列中。

dff["counts"] = dff.assign(date_col = lambda x: x.index.date).groupby(['date_col']).transform('count')

这是粘贴到 IDE 和测试的全部内容:

import pandas as pd

dff = pd.DataFrame(['red','red','blue'],
    columns = ['colors'],
    index = [pd.Timestamp('2019-09-19 14:03:20'),pd.Timestamp('2019-09-19 17:03:20'),pd.Timestamp('2019-09-20 14:03:20')])

dff["counts"] = dff.assign(date_col = lambda x: x.index.date).groupby(['date_col']).transform('count')

print(dff)

结果:

                        colors  counts
2019-09-19 14:03:20    red       2
2019-09-19 17:03:20    red       2
2019-09-20 14:03:20   blue       1

推荐阅读