我有两个数据框。
df1包含数字和时间戳。这是一个很大的集合。
df1.head()
Out[292]:
2016-08-31 08:09:00 1.0
2016-08-31 08:11:00 7.0
2016-08-31 08:14:00 90.0
df2包含间隔
d2.head()
Out[292]:
start stop C
2016-08-31 08:09:00 2016-08-31 08:12:00 'a'
2016-08-31 08:13:00 2016-08-31 08:20:00 'b'
2016-08-31 08:20:00 2016-08-31 08:45:00 'c'
我想向添加新列,C
以df1
使的值C
对应于df2
包含索引的间隔的in值df1
。
预期结果
df1.head()
Out[292]: C
2016-08-31 08:09:00 1.0 'a'
2016-08-31 08:11:00 7.0 'a'
2016-08-31 08:14:00 90.0 'b'
到目前为止,我已经尝试过:
df1.loc[:,'C']=df1.index.map(lambda i:df2[np.logical_and(i>df2.starti<df2.stop)].C)
但是它效率极低,并且在某些情况下会崩溃,因为某些情况下df2的间隔列表中缺少索引值。
如何有效地做到这一点?
创建IntervalIndex
的IntervalIndex.from_arrays
第一:
s = pd.IntervalIndex.from_arrays(df2['start'], df2['stop'], 'both')
print (s)
IntervalIndex([[2016-08-31 08:09:00, 2016-08-31 08:12:00],
[2016-08-31 08:13:00, 2016-08-31 08:20:00],
[2016-08-31 08:20:00, 2016-08-31 08:45:00]],
closed='both',
dtype='interval[datetime64[ns]]')
然后set_index
通过新IntervalIndex
设置将新列按以下条件创建的数组values
:
df1['C'] = df2.set_index(s).loc[df1.index, 'C'].values
print (df1)
A C
2016-08-31 08:09:00 1.0 a
2016-08-31 08:11:00 7.0 a
2016-08-31 08:14:00 90.0 b
编辑:
s = pd.IntervalIndex.from_arrays(df2['start'].astype(np.int64),
df2['stop'].astype(np.int64), 'both')
print (s)
IntervalIndex([[1472630940000000000, 1472631120000000000],
[1472631180000000000, 1472631600000000000],
[1472631600000000000, 1472633100000000000]],
closed='both',
dtype='interval[int64]')
df1['C'] = df2.set_index(s).loc[df1.index.astype(np.int64), 'C'].values
print (df1)
A C
2016-08-31 08:09:00 1.0 a
2016-08-31 08:11:00 7.0 a
2016-08-31 08:14:00 90.0 b
有两个这样的数据帧(示例) df1 df2 然后,我想加入df1和df2,但是我不知道如何做到这一点,因为在第二个df中我只有开始和结束时间。如何根据第二个df的数据将条件放在第一个df上? 这就是我想要的
问题内容: 我有一列称为“ s_timestamp”。 如何返回时间戳中具有当天的所有记录? 例如, 我想要以下输出: 让我知道是否不清楚。 问题答案: 只是使用。例如 日期() CURDATE()
我需要将两个数据集与CLOSE时间戳连接起来。第一个数据集是来自移动应用程序的日记数据集: 在这里: 第二个数据集是来自加速度计日志的数据集,显示移动(=INVH)或空闲(=NIVH): 在这里: 我需要根据时间戳字段之间的时间差连接两个数据帧。例如,在df1上留下join,以查看应用程序日志数据如何与实际加速度计日志一致。简单的左连接在这里不起作用,因为在大多数情况下有一个滞后时间。所以我的问题
我正在阅读Flink示例CountWithTimestamp,下面是该示例的代码片段: 我的问题是,如果我删除onTimer中的if语句(收集未触摸的stmt),而代之以processElement开头的另一个if语句
我需要一个自定义的WindowFn,或者应该怎么做?
问题内容: 问题:给定一组任意时间间隔的时间,将所有重叠的时间间隔合并为一个,然后输出结果,该结果应该只有互斥的时间间隔。为了简单起见,将间隔表示为整数对。例如,让给定的间隔集为{{1,3},{2,4},{5,7},{6,8}}。间隔{1,3}和{2,4}彼此重叠,因此应将它们合并并成为{1,4}。同样,{5,7}和{6,8}应该合并并成为{5,8} 编写一个函数,该函数为给定间隔集生成合并间隔集
问题内容: 假设我有以下内容的事件表,和。 我想知道X人花了多少时间做一个事件(事件可以互相覆盖)。 如果此人只有1个事件,则很简单: 如果此人有2个事件,那将很棘手。 我将为预期的结果设置一些方案。 场景1 这意味着他的结果应该是从1到5的datediff 方案2 这意味着他的结果应该是一些和 如何在sql查询中获得此结果?我只能想到一堆if语句,但是同一个人可以有n个事件,因此查询确实会造成混
我偶然发现了这个不错的教程https://github.com/manashmndl/DeadSimpleSpeechRecognizer其中数据是基于由文件夹分隔的样本进行训练的,所有mfcc都是一次计算的。 我正试图以不同的方式实现类似的目标。 基于此:https://librosa.github.io/librosa/generated/librosa.feature.mfcc.html l