相关疑难解决方法(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数据帧,其中一个数据帧中的日期在另一个数据帧中的两个日期之间.

Dataframe A有一个日期("fdate")和一个ID("cusip"):

在此输入图像描述

我需要将此与此数据帧B合并:

在此输入图像描述

A.cusip==B.ncusipA.fdate之间B.namedtB.nameenddt.

在SQL中这将是微不足道的,但我能看到如何在pandas中执行此操作的唯一方法是首先在标识符上无条件合并,然后在日期条件上进行过滤:

df = pd.merge(A, B, how='inner', left_on='cusip', right_on='ncusip')
df = df[(df['fdate']>=df['namedt']) & (df['fdate']<=df['nameenddt'])]
Run Code Online (Sandbox Code Playgroud)

这真的是最好的方法吗?似乎如果可以在合并中进行过滤以避免在合并之后但在过滤器完成之前具有可能非常大的数据帧,则会好得多.

python timespan join date-range pandas

46
推荐指数
3
解决办法
2万
查看次数

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

我有两个数据帧,我需要根据日期值是否适合两个其他日期进行合并.基本上我需要执行外连接,其中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
查看次数

将一个数据框中的值与另一个数据框中的列的值进行比较,并从第三列获取数据

标题有点令人困惑,但我会尽力在这里解释我的问题.我有2个pandas数据帧,a和b:

>> print a

id | value
 1 | 250
 2 | 150
 3 | 350
 4 | 550
 5 | 450

>> print b

low | high | class
100 | 200  | 'A' 
200 | 300  | 'B' 
300 | 500  | 'A' 
500 | 600  | 'C' 
Run Code Online (Sandbox Code Playgroud)

我想在表a中创建一个名为class的新列,该列包含符合表b的值的类.这是我想要的结果:

>> print a

id | value | class
 1 | 250   | 'B'
 2 | 150   | 'A'
 3 | 350   | 'A'
 4 | 550   | …
Run Code Online (Sandbox Code Playgroud)

python pandas

7
推荐指数
2
解决办法
1337
查看次数

Pandas在`datetimeIndex`中合并`datetime`或`datetime`

目前我有两个代表excel电子表格的数据框.我希望加入日期相同的数据.这是一对多的连接,因为一张电子表格有一个日期,然后我需要添加具有相同日期的多行的数据

一个例子:

            A                  B
     date     data       date                 data
0    2015-0-1 ...     0  2015-0-1 to 2015-0-2 ...
1    2015-0-2 ...     1  2015-0-1 to 2015-0-2 ...
Run Code Online (Sandbox Code Playgroud)

在这种情况下,来自A的两行都将从B接收行0和1,因为它们在该范围内.

我试过用

df3 = pandas.merge(df2, df1, how='right', validate='1:m', left_on='Travel Date/Range', right_on='End')
Run Code Online (Sandbox Code Playgroud)

完成此操作但收到此错误.

Traceback (most recent call last):
  File "<pyshell#61>", line 1, in <module>
    df3 = pandas.merge(df2, df1, how='right', validate='1:m', left_on='Travel Date/Range', right_on='End')
  File "C:\Users\M199449\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\core\reshape\merge.py", line 61, in merge
    validate=validate)
  File "C:\Users\M199449\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\core\reshape\merge.py", line 555, in __init__
    self._maybe_coerce_merge_keys()
  File "C:\Users\M199449\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\core\reshape\merge.py", line 990, in _maybe_coerce_merge_keys
    raise ValueError(msg)
ValueError: You …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

在 Pandas 中对包含 Python `range` 或类似列表的列执行合并

我的问题是一个扩展一个几年前提出。

我正在尝试左连接,但我想加入的列之一需要是一个范围值。它需要是一个范围,因为扩展它意味着数百万个新的(和不必要的)行。直觉上,使用 Python 的in操作符似乎是可能的(这x in range(y, z)是很常见的),但会涉及一个讨厌的 for 循环和 if/else 块。一定有更好的方法。

这是我的数据的一个简单版本:

# These are in any order
sample = pd.DataFrame({
    'col1': ['1b', '1a', '1a', '1b'],
    'col2': ['2b', '2b', '2a', '2a'],
    'col3': [42, 3, 21, 7]
})

# The 'look-up' table
look_up = pd.DataFrame({
    'col1': ['1a', '1a', '1a', '1a', '1b', '1b', '1b', '1b'],
    'col2': ['2a', '2a', '2b', '2b', '2a', '2a', '2b', '2b'],
    'col3': [range(0,10), range(10,101), range(0,10), range(10,101), range(0,10), range(10,101), range(0,10), range(10,101)],
    'col4': ['a', 'b', …
Run Code Online (Sandbox Code Playgroud)

merge range python-3.x pandas

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

如何在非简单化标准下使用Pandas执行DataFrames的内部或外部联接

给出两个数据帧如下:

>>> import pandas as pd

>>> df_a = pd.DataFrame([{"a": 1, "b": 4}, {"a": 2, "b": 5}, {"a": 3, "b": 6}])
>>> df_b = pd.DataFrame([{"c": 2, "d": 7}, {"c": 3, "d": 8}])
>>> df_a
   a  b
0  1  4
1  2  5
2  3  6

>>> df_b
   c  d
0  2  7
1  3  8
Run Code Online (Sandbox Code Playgroud)

我们希望使用非简单的标准生成两种数据帧的SQL样式连接,比如说"df_b.c> df_a.a".从我所知,虽然merge()肯定是解决方案的一部分,但我不能直接使用它,因为它不接受"ON"标准的任意表达式(除非我遗漏了什么?).

在SQL中,结果如下所示:

# inner join
sqlite> select * from df_a join df_b on c > a;
1|4|2|7
1|4|3|8
2|5|3|8

# outer join …
Run Code Online (Sandbox Code Playgroud)

python sql numpy pandas

6
推荐指数
1
解决办法
1万
查看次数

使用 Pandas 从另一个数据帧中的信息中过滤数据帧

我有一个下面的数据框。

df = pd.DataFrame(columns=['Chromosome', 'Start','End'],
     data=[
           ['chr1', 2000, 3000],
           ['chr1', 500, 1500],
           ['chr3', 3000, 4000],
           ['chr5', 4000, 5000],
           ['chr17', 9000, 10000],
           ['chr19', 1500, 2500]
           ])
Run Code Online (Sandbox Code Playgroud)

我有一个探针数据框,如下所示。

probes = pd.DataFrame(columns=['Probe', 'Chrom','Position'],
     data=[
           ['CG999', 'chr1', 2500],
           ['CG000', 'chr19, 2000],
           ])
Run Code Online (Sandbox Code Playgroud)

我想过滤 df 以查找包含探针染色体并且探针位置在其开始和结束编号之间的行,然后将探针名称添加到 df 中的新列/字段。所需的输出如下:

    Probe    Chrom    Start    End
0   CG999    chr1     2000     3000
5   CG000    chr19    1500     2500
Run Code Online (Sandbox Code Playgroud)

我在下面的尝试有效,但没有将探针名称放入探针列中,并且依赖于循环探针数据。必须有一种更有效的方法来做到这一点。

all_indexes = []

# fake2.tsv is the aforementioned probes dataframe
with open('fake2.tsv') as f:
    for x in f:
        probe, chrom, pos = …
Run Code Online (Sandbox Code Playgroud)

python filter pandas

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