使用熊猫基于另一个数据框向数据框添加列

时间:2020-09-06 12:02:46

标签: python pandas numpy dataframe

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

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

具有间隔的数据框

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所说,它不是过滤器,我想根据其他数据帧中的间隔添加一个新列。

1 个答案:

答案 0 :(得分:1)

您可以根据time中的时间,使用pd.cutdf2中的df1分为离散间隔,然后使用{{3 }}来获取标识不同有序值的数字数组。

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