首页 > 解决方案 > 使用熊猫根据另一个数据框向数据框添加列

问题描述

我需要根据另一个数据帧的间隔在数据帧中创建一个新列。例如,我有一个数据框,其中时间列中有值,我想根据该时间列中的间隔在另一个数据框中创建列。

我认为一个实际的例子更容易理解:

带间隔的数据框

df1

    time    value   var2
0   1.0     34.0    35.0
1   4.0     754.0   755.0
2   9.0     768.0   769.0
3   12.0    65.0    66.0

我需要过滤的数据框

df2

    time   value    var2
0   1.0    23.0     23.0 
1   2.0    43.0     43.0   
2   3.0    76.0     12.0 
3   4.0    88.0     22.0 
4   5.0    64.0     45.0 
5   6.0    98.0     33.0 
6   7.0    76.0     11.0 
7   8.0    56.0     44.0 
8   9.0    23.0     22.0 
9   10.0   54.0     44.0 
10  11.0   65.0     22.0 
11  12.0   25.0     25.0 

应该导致

df3

    time   value    var2    interval
0   1.0    23.0     23.0     1
1   2.0    43.0     43.0     1  
2   3.0    76.0     12.0     1
3   4.0    88.0     22.0     1
4   5.0    64.0     45.0     2
5   6.0    98.0     33.0     2
6   7.0    76.0     11.0     2
7   8.0    56.0     44.0     2
8   9.0    23.0     22.0     2
9   10.0   54.0     44.0     3
10  11.0   65.0     22.0     3
11  12.0   25.0     25.0     3

编辑:正如 Shubham Sharma 所说,它不是过滤器,我想根据其他数据框中的间隔添加一个新列。

标签: pythonpandasnumpydataframe

解决方案


您可以使用基于时间将inpd.cut分类为离散间隔,然后用于获取标识不同有序值的数值数组。timedf2df1Series.factorize

df2['interval'] = pd.cut(df2['time'], df1['time'], include_lowest=True)\
                    .factorize(sort=True)[0] + 1

结果:

    time  value  var2  interval
0    1.0   23.0  23.0         1
1    2.0   43.0  43.0         1
2    3.0   76.0  12.0         1
3    4.0   88.0  22.0         1
4    5.0   64.0  45.0         2
5    6.0   98.0  33.0         2
6    7.0   76.0  11.0         2
7    8.0   56.0  44.0         2
8    9.0   23.0  22.0         2
9   10.0   54.0  44.0         3
10  11.0   65.0  22.0         3
11  12.0   25.0  25.0         3

推荐阅读