作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想添加一列(标题为“acc_dates”),该列将给出带有日期时间索引的数据框中日期的增加计数。这是一个例子:
import pandas as pd
import datetime as dt
datarange=pd.date_range('01-05-2018 00:00:00', periods=50, freq="4H")
range_series_1=pd.Series(np.random.randint(-5,3,size=50).astype(float), index=datarange)
df=pd.DataFrame({'value1':range_series_1})
df.head(5)
Out[287]:
value1
datetime
2018-01-05 00:00:00 1.0
2018-01-05 04:00:00 -2.0
2018-01-05 08:00:00 -2.0
2018-01-05 12:00:00 -3.0
2018-01-05 16:00:00 1.0
如果我应用cumcount()
,“value1”列就会消失。这是我输入的内容和得到的结果:
df.groupby(df.index.date).cumcount().to_frame('acc_dates').head(15)
Out[288]:
acc_dates
datetime
2018-01-05 00:00:00 0
2018-01-05 04:00:00 1
2018-01-05 08:00:00 2
2018-01-05 12:00:00 3
2018-01-05 16:00:00 4
2018-01-05 20:00:00 5
2018-01-06 00:00:00 0
2018-01-06 04:00:00 1
2018-01-06 08:00:00 2
2018-01-06 12:00:00 3
2018-01-06 16:00:00 4
2018-01-06 20:00:00 5
2018-01-07 00:00:00 0
2018-01-07 04:00:00 1
2018-01-07 08:00:00 2
我可以合并“datetime”上的两个数据帧以获得所需的输出,但我宁愿不应用 pd.merge() 方法。这是我期望的输出:
Out[296]:
value1 acc_dates
datetime
2018-01-05 00:00:00 1.0 0
2018-01-05 04:00:00 -2.0 1
2018-01-05 08:00:00 -2.0 2
2018-01-05 12:00:00 -3.0 3
2018-01-05 16:00:00 1.0 4
2018-01-05 20:00:00 0.0 5
2018-01-06 00:00:00 2.0 0
2018-01-06 04:00:00 -3.0 1
2018-01-06 08:00:00 -5.0 2
2018-01-06 12:00:00 -5.0 3
2018-01-06 16:00:00 1.0 4
2018-01-06 20:00:00 -2.0 5
2018-01-07 00:00:00 2.0 0
2018-01-07 04:00:00 1.0 1
2018-01-07 08:00:00 -1.0 2
2018-01-07 12:00:00 -2.0 3
理想情况下,我正在寻找一种方法来以某种方式在初始 df inplace
中创建和添加列。
这可行吗?我欢迎您的建议。
最佳答案
我认为merge
或concat
不是必需的,只需将输出分配给新列:
df['acc_dates'] = df.groupby(df.index.date).cumcount()
关于python - 数据帧 : Add 'inplace' a column with the cumcount() of the dates appeared in the datetime. 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58554126/
我是一名优秀的程序员,十分优秀!