python - 使用 groupby 的一列创建带有 pandas 的 X 新列

标签 python pandas

我有这个数据框df:

                     date dir
0     2018-01-23 11:39:41  O1
1     2018-01-23 12:47:58  E0
2     2018-01-23 13:01:19  O1
3     2018-01-23 13:01:21  O1
4     2018-01-23 13:06:06  O1
5     2018-01-23 13:32:55  O1
6     2018-01-23 13:33:56  O1
7     2018-01-23 13:33:58  O1
8     2018-01-23 13:46:47  E0
9     2018-01-23 14:04:01  E0
10    2018-01-23 14:04:39  O1
11    2018-01-23 14:09:16  E0
12    2018-01-23 14:17:46  E0
...

我想按date(每小时)和dir(方向)计算出现的次数。 有两个不同的方向:E0O1

所以我做到了:

df = df.groupby(['dir',pd.Grouper(key='date', freq='H')]).size()

当然我有这样的东西:

dir  date               
E0   2018-01-23 12:00:00     1
     2018-01-23 13:00:00     1
     2018-01-23 14:00:00     5
...
O1   2018-05-21 19:00:00     1
     2018-05-21 20:00:00     1
     2018-05-22 06:00:00     2
...

但我想为每个不同的方向创建一个新列:

                date    E0 O1
 2018-05-21 19:00:00     1  0
 2018-05-21 20:00:00     1  2
 2018-05-22 06:00:00     2  0
...

我该怎么做?

最佳答案

使用Series.unstack通过第一级和参数 fill_value 为不存在的 dirdates 替换新的 NaNs 值:

df = df.groupby(['dir',pd.Grouper(key='date', freq='H')]).size().unstack(0, fill_value=0)
print (df)
dir                  E0  O1
date                       
2018-01-23 11:00:00   0   1
2018-01-23 12:00:00   1   0
2018-01-23 13:00:00   1   6
2018-01-23 14:00:00   3   1

关于python - 使用 groupby 的一列创建带有 pandas 的 X 新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55337571/

相关文章:

python - 一次一个字符构建一个字符串,检查它是否包含相邻的重复子字符串

python - Django 表单 EmailField 不接受 css 属性

python - numpy 的 bincount 函数的反函数

python - 如何从 Python 中的 exec 或 execfile 获取错误的行号

python - Google BigQuery Schema 冲突(pyarrow 错误)与使用 load_table_from_dataframe 的数字数据类型

python - 如何用点而不是条形图创建直方图

python - Pygame 面具碰撞

python - 在单独的列表中对 Pandas 数据框列值进行矢量化查找

python-3.x - TypeError:fit()缺少1个必需的位置参数: 'y'

python - resample() 收到意外的关键字参数 'how' ?