pandas - 如何在具有相同值的其他列上添加新功能
问题描述
我们如何在 A 列和时间序列的基础上添加一个新的“新功能”列。
A 列:数字 5、8、9 具有相同的值
Timeseries(hh:mm:ms): 115312, 115313, 115314 具有几乎相同的值。(也许我们可以设置在3分钟的范围内)
新功能:因此他们可以放入一个组,我们将其标记为“1”,其他人可以将其标记为“0”
在我的原始数据集中,A 列中有成千上万个不同的值,有没有简单的方法来制作如下图所示的新特征?
A TImeseries new feature
1 1314 121314 1
2 2245 121415 1
3 1362 122241 0
4 3655 122512 0
5 4444 115312 1
6 1314 121414 1
7 2245 121515 1
8 4444 115313 1
9 4444 115314 1
10 2245 121615 1
解决方案
采用:
#3 minutes threshold
N = pd.Timedelta(3 * 60, unit='s')
#convert times to timedeltas
s = df['TImeseries'].astype(str).str.replace('(\d{2})(\d{2})(\d{2})', r'\1:\2:\3')
df['TImeseries'] = pd.to_timedelta(s)
#sorting by both columns
df = df.sort_values(['A','TImeseries'])
#get difference per groups and compare by threshold
m1 = df.groupby('A')['TImeseries'].diff().fillna(pd.Timedelta(0)) < N
#get duplicates by A column
m2 = df['A'].duplicated(keep=False)
#chain by bitwise AND and convert to integers
df['new'] = (m1 & m2).view('i1')
#get default ordering of index
df = df.sort_index()
print (df)
A TImeseries new feature new
1 1314 12:13:14 1 1
2 2245 12:14:15 1 1
3 1362 12:22:41 0 0
4 3655 12:25:12 0 0
5 4444 11:53:12 1 1
6 1314 12:14:14 1 1
7 2245 12:15:15 1 1
8 4444 11:53:13 1 1
9 4444 11:53:14 1 1
10 2245 12:16:15 1 1
推荐阅读
- c++ - C++,运算符<在 std::map
- python - 如何对熊猫中的列进行多数投票
- angular - 是否可以停止项目排序并在 cdkDropList 中获取孩子的 XY 坐标?
- python - Python-PDFkit 错误 - QFontEngine:字形既不是轮廓也不是位图格式
- c++ - 跨应用程序版本的兼容性的类继承?
- javascript - HTML5 中的画布上未显示文本
- android - WifiManager.startScan() 不在电话上调用 onReceive()
- python - 问题连接“str”和“int”对象
- vue.js - 为什么 Firefox 开发工具认为来自 Vue.js 对象的 getter 函数未定义?
- husky - 如何创建自定义哈士奇钩?(node.js/package.json)