最近我在使用R遇到类似问题时获得了帮助,现在我想在python 2.7中使用pandas做到这一点。我在这里已经审查了几个类似的问题,但是but仍然有问题。

我有两个数据框:

import pandas as pd

dfa = pd.DataFrame([["1", "1", "2", "A"], ["2", "1", "2", "A"], ["3", "3",
    "4", "B"], ["4", "3", "4", "B"], ["5", "5", "6", "C"], ["6", "5", "6",
    "C"], ["7", "7", "8", "D"], ["8", "7", "8", "D"]], columns=['TimeStamp',
    'Min', 'Max', 'Group'])
dfb = pd.DataFrame([['1'], ['2'], ['3'], ['4'], ['5'], ['6'], ['7'], ['8']],
    columns = ['TimeStamp'])


python - 根据来自另一个数据框的组范围解释数据框列的范围-LMLPHP

我正在寻找一种基于dfa中每个组的最小-最大范围内的时间戳在dfb中创建组ID的方法。因此,dfb_final:

python - 根据来自另一个数据框的组范围解释数据框列的范围-LMLPHP

这是针对较大的数据集,我已简化了示例。我只是不太确定下一步该怎么做。根据其他答案,我得到了dfa中的最大最小值列。非常感谢大家的学习。

最佳答案

您可以使用np.searchsorted。以下解决方案假定各组之间的Min / Max值没有重叠。首先将一些序列转换为数值,以便可以通过NumPy使用:

dfa[dfa.columns[:-1]] = dfa[dfa.columns[:-1]].apply(pd.to_numeric)
dfb['TimeStamp'] = pd.to_numeric(dfb['TimeStamp'])


注意datetime /时间戳值可以转换为等效的数字。

然后提取唯一的组和Min / Max值的展平版本:

groups = dfa['Group'].unique()
vals = dfa.drop_duplicates('Group').loc[:, ['Min', 'Max']].values.ravel()


最后,使用np.searchsorted将时间戳记放置在vals中,并使用结果索引groups

dfb['Group'] = groups[np.searchsorted(dfb['TimeStamp'].values, vals) // 2]

print(dfb)

   TimeStamp Group
0          1     A
1          2     A
2          3     B
3          4     B
4          5     C
5          6     C
6          7     D
7          8     D

09-04 11:20
查看更多