相关疑难解决方法(0)

如何连接列值在一定范围内的两个数据帧?

给定两个dataframes df_1df_2如何加入他们的行列,使得datetime列df_1是介于两者之间start,并end 在数据帧df_2:

print df_1

  timestamp              A          B
0 2016-05-14 10:54:33    0.020228   0.026572
1 2016-05-14 10:54:34    0.057780   0.175499
2 2016-05-14 10:54:35    0.098808   0.620986
3 2016-05-14 10:54:36    0.158789   1.014819
4 2016-05-14 10:54:39    0.038129   2.384590


print df_2

  start                end                  event    
0 2016-05-14 10:54:31  2016-05-14 10:54:33  E1
1 2016-05-14 10:54:34  2016-05-14 10:54:37  E2
2 2016-05-14 10:54:38  2016-05-14 10:54:42  E3
Run Code Online (Sandbox Code Playgroud)

获取相应的event位置和df1.timestamp之间df_2.startdf2.end

  timestamp              A          B          event
0 2016-05-14 10:54:33 …
Run Code Online (Sandbox Code Playgroud)

python datetime intervals dataframe pandas

47
推荐指数
5
解决办法
3521
查看次数

在pandas中按范围加入/合并的最佳方式

我经常使用范围条件将pandas用于合并(join).

例如,如果有2个数据帧:

A(A_id,A_value)

B(B_id,B_low,B_high,B_name)

它们很大并且大小相同(比如每个2M记录).

我想在A和B之间建立一个内连接,所以A_value将在B_low和B_high之间.

使用SQL语法:

SELECT *
FROM A,B
WHERE A_value between B_low and B_high
Run Code Online (Sandbox Code Playgroud)

这将非常简单,简短而有效.

同时在pandas中唯一的方法(不使用我发现的循环)是在两个表中创建一个虚拟列,连接它(相当于交叉连接),然后过滤掉不需要的行.这听起来沉重而复杂:

A['dummy'] = 1
B['dummy'] = 1
Temp = pd.merge(A,B,on='dummy')
Result = Temp[Temp.A_value.between(Temp.B_low,Temp.B_high)]
Run Code Online (Sandbox Code Playgroud)

我的另一个解决方案是通过使用B[(x>=B.B_low) & (x<=B.B_high)]掩码在B上的每个A值上应用搜索函数,但它听起来效率低,并且可能需要索引优化.

是否有更优雅和/或更有效的方式来执行此操作?

python join numpy pandas

20
推荐指数
2
解决办法
6707
查看次数

基于两个其他日期之间的日期合并两个数据帧而不使用公共列

我有两个数据帧,我需要根据日期值是否适合两个其他日期进行合并.基本上我需要执行外连接,其中B.event_date位于A.start_date和A.end_date之间.似乎合并和连接总是假设一个公共列,在这种情况下,我没有.

    A                           B
    start_date  end_date        event_date  price
0   2017-03-27  2017-04-20  0   2017-01-20  100
1   2017-01-10  2017-02-01  1   2017-01-27  200

Result 
    start_date  end_date        event_date  price
0   2017-03-27  2017-04-20  
1   2017-01-10  2017-02-01      2017-01-20  100
2   2017-01-10  2017-02-01      2017-01-27  200
Run Code Online (Sandbox Code Playgroud)

python pandas

16
推荐指数
1
解决办法
8770
查看次数

熊猫表查找

我有一个像这样的pandas查找表

Grade   Lower_Boundary  Upper_Boundary
1   -110    -96
2   -96 -91
3   -91 -85
4   -85 -81
5   -81 -77
6   -77 -72
7   -72 -68
8   -68 -63
9   -63 -58
10  -58 -54
11  -54 -50
12  -50 -46
13  -46 -42
14  -42 -38
15  -38 -34
16  -34 -28
17  -28 -18
18  -18 -11
19  -11 -11
20  -11 -9
Run Code Online (Sandbox Code Playgroud)

我有另一个看起来包含得分的熊猫数据框.我想通过查找查找表将"成绩"分配给分数列.因此,根据分数下降和上限的间隔,应从查找表中的该行分配等级.有没有办法在不输入if if else语句的情况下执行此操作?我只想到excel的索引匹配.

Score   Grade
-75 6
-75 6
-60 9
-66 8
-66 8
-98 …
Run Code Online (Sandbox Code Playgroud)

python lookup pandas

7
推荐指数
1
解决办法
8981
查看次数

根据日期范围合并数据框

我有两个大熊猫dataframes:一个(df1)有三列(StartDate,EndDate,和ID)和第二(df2)用日期.我想合并df1df2基于df1.StartDate和之间的df2.Date df2.EndDate.

每个日期范围df1都是唯一的,不会与数据框中的任何其他行重叠.

日期格式化YYYY-MM-DD.

python python-2.7 pandas

5
推荐指数
1
解决办法
5331
查看次数

熊猫:根据时间间隔加入数据帧

我有一个数据框,每 10 分钟有一个日期时间列和一个数值:

df1 = pd.DataFrame({'time' : pd.date_range('1/1/2018', periods=20, freq='10min'), 'value' : np.random.randint(2, 20, size=20)})
Run Code Online (Sandbox Code Playgroud)

另一个有事件时间表,有开始时间和结束时间。可以同时发生多个事件:

df2 = pd.DataFrame({'start_time' : ['2018-01-01 00:00:00', '2018-01-01 00:00:00','2018-01-01 01:00:00', '2018-01-01 01:00:00', '2018-01-01 01:00:00', '2018-01-01 02:00:00' ], 'end_time' : ['2018-01-01 01:00:00', '2018-01-01 01:00:00', '2018-01-01 02:00:00','2018-01-01 02:00:00', '2018-01-01 02:00:00', '2018-01-01 03:00:00'], 'event' : ['A', 'B', 'C', 'D', 'E', 'F'] })
df2[['start_time', 'end_time']] = df2.iloc[:,0:2].apply(pd.to_datetime)
Run Code Online (Sandbox Code Playgroud)

我想对 df1 进行左连接,所有事件都在开始和结束时间内。我的输出表应该是:

                  time  value event
0  2018-01-01 00:00:00      5     A
1  2018-01-01 00:00:00      5     B
2  2018-01-01 00:10:00     15     A
3 …
Run Code Online (Sandbox Code Playgroud)

python datetime pandas

3
推荐指数
1
解决办法
1610
查看次数

标签 统计

pandas ×6

python ×6

datetime ×2

dataframe ×1

intervals ×1

join ×1

lookup ×1

numpy ×1

python-2.7 ×1