按组的每个出现值构建计数列
Posted
技术标签:
【中文标题】按组的每个出现值构建计数列【英文标题】:Build count columns by each occurring value of groups 【发布时间】:2020-03-28 17:04:58 【问题描述】:我有一个熊猫 DataFrame,每天有多个条目,按日期时间索引。现在我想按天对所有行进行分组,并使用当天出现的每个值的计数创建新列。
看看这个例子:
value
startDate
2017-06-08 16:00:00+01:00 True
2017-06-08 17:00:00+01:00 True
2017-06-08 18:00:00+01:00 True
2017-06-08 19:00:00+01:00 True
2017-06-08 20:00:00+01:00 True
... ...
2019-12-02 19:00:00+01:00 True
2019-12-02 20:00:00+01:00 False
2019-12-02 21:00:00+01:00 True
2019-12-02 22:00:00+01:00 True
我想将数据转换成这个结果:
True False
date
2017-06-08 5 0
... ... ...
2019-12-02 3 1
我发现我可以像这样按天分组:
df = pd.read_csv('./data.csv', parse_dates=[0], index_col=[0])
by_day = df.groupby(df.index.date)
不幸的是,我不知道如何从这里开始创建“计数列”,我在网上找到的所有资源只计算了每个组中的所有元素。任何正确方向的提示都表示赞赏!
【问题讨论】:
【参考方案1】:df = pandas.DataFrame(
'date': ['2019-01-01', '2019-01-01', '2019-01-01', '2019-01-02', '2019-01-02'],
'value': [True, False, False, True, False]
)
可以使用SeriesGroupBy对象的value_counts()
函数:
documentation of that particular function有点薄,不过可以参考pandas.Series.value_counts()
documentation,里面有参数。
df.groupby('date')['value'].value_counts().unstack(level='value', fill_value=0)
# Result:
value False True
date
2019-01-01 2 1
2019-01-02 1 1
【讨论】:
以上是关于按组的每个出现值构建计数列的主要内容,如果未能解决你的问题,请参考以下文章