python - 按条件对系列切片数据集
问题描述
我有数据集:
data = {'host': ['A','A','A','A','A','A','B','B','B','B','B','B'],
'TS': ['1','2', '3', '7', '9','11','7','8','9','14','16', '18'],
'Predict' : ['None','None', '134','None','None', '127','None','None', '121','None','None', '124']}
我想按非无值系列拆分数据集并获取该系列的时间差。
我有时差功能。并尝试为系列提取索引,但不知道它是如何使用的
def timediffs(series):
series['tdiff'] = series['ts'].diff().fillna(0.0)
return series
predict_index = df.index.where(df['Predict'].notna()).to_series().bfill()
最后,我想得到这样的数据集:
new_data = {'host': ['A','A','A','A','A','A','B','B','B','B','B','B'],
'TS': ['1','2', '3', '7', '9','11','7','8','9','14','16', '19'],
'Predict' : ['None','None', '134','None','None', '127','None','None', '121','None','None', '124'],
'Time_diff' : ['0','1','1','0','2','2', '0','1','1','0','2','3',],
'New_predict' : ['134','134','134','127','127','127','121','121','121','124','124','124',]
}
new_df = pd.DataFrame(new_data)
解决方案
首先我们替换'None'
为NaN
. 然后我们backfill (bfill)
用来制作我们的专栏,New_predict
最后我们GroupBy.diff
用来获取Time_diff
:
df['New_predict'] = df.replace('None', np.NaN).loc[:, 'Predict'].bfill()
# df['TS'] = df['TS'].astype(int)
df['Time_diff'] = df.groupby('New_predict')['TS'].diff().fillna(0)
host TS Predict New_predict Time_diff
0 A 1 None 134 0.0
1 A 2 None 134 1.0
2 A 3 134 134 1.0
3 A 7 None 127 0.0
4 A 9 None 127 2.0
5 A 11 127 127 2.0
6 B 7 None 121 0.0
7 B 8 None 121 1.0
8 B 9 121 121 1.0
9 B 14 None 124 0.0
10 B 16 None 124 2.0
11 B 18 124 124 2.0
推荐阅读
- python - 如何根据它们的值组合两个字典?
- sql - 提高多级自连接的类图查询的 Postgres 性能(与 Neo4j 比较)
- grails - 无法在没有索引的情况下将列表绑定到命令对象
- javascript - 如何使用设备的 12/24 小时时间设置在移动网站上格式化时间?
- hyperledger-fabric - 作曲家参加织物
- r - R编程 - 顺序函数无法与包含一位和两位数字变量的列正确工作
- html - 使用内联块与内联,两者似乎都没有达到我的预期
- r - R中的writeRaster函数自动设置(不需要的)最大值,我可以将最大值设置为null吗?
- assembly - 难以弄清楚对汇编函数的调用返回什么
- c++ - c++: 解析和文件 i/o