相关疑难解决方法(0)

根据pandas中列的值从DataFrame中选择行

如何根据pandas中某些列中的值从DataFrame中选择行?
在SQL中我会使用:

SELECT *
FROM table
WHERE colume_name = some_value
Run Code Online (Sandbox Code Playgroud)

我试着看看熊猫文档,但没有立即找到答案.

python dataframe pandas

1649
推荐指数
15
解决办法
230万
查看次数

如何为Pandas数据帧实现'in'和'not in'

我怎样才能实现SQL的的等价物INNOT IN

我有一个包含所需值的列表.这是场景:

df = pd.DataFrame({'countries':['US','UK','Germany','China']})
countries = ['UK','China']

# pseudo-code:
df[df['countries'] not in countries]
Run Code Online (Sandbox Code Playgroud)

我目前的做法如下:

df = pd.DataFrame({'countries':['US','UK','Germany','China']})
countries = pd.DataFrame({'countries':['UK','China'], 'matched':True})

# IN
df.merge(countries,how='inner',on='countries')

# NOT IN
not_in = df.merge(countries,how='left',on='countries')
not_in = not_in[pd.isnull(not_in['matched'])]
Run Code Online (Sandbox Code Playgroud)

但这似乎是一个可怕的kludge.任何人都可以改进吗?

python sql-function dataframe pandas

353
推荐指数
9
解决办法
34万
查看次数

使用Cython查找数组中所有独特元素的最快方法

我试图找到最有效的方法来从NumPy数组中查找唯一值.NumPy的unique功能非常慢,在找到唯一值之前先对值进行排序.Pandas使用klib C库来散列值,这个库要快得多.我正在寻找一个Cython解决方案.

最简单的解决方案似乎是遍历数组并使用Python集添加每个元素,如下所示:

from numpy cimport ndarray
from cpython cimport set

@cython.wraparound(False)
@cython.boundscheck(False)
def unique_cython_int(ndarray[np.int64_t] a):
    cdef int i
    cdef int n = len(a)
    cdef set s = set()
    for i in range(n):
        s.add(a[i])
    return s
Run Code Online (Sandbox Code Playgroud)

我也试过c ++中的unordered_set

from libcpp.unordered_set cimport unordered_set
@cython.wraparound(False)
@cython.boundscheck(False)
def unique_cpp_int(ndarray[np.int64_t] a):
    cdef int i
    cdef int n = len(a)
    cdef unordered_set[int] s
    for i in range(n):
        s.insert(a[i])
    return s
Run Code Online (Sandbox Code Playgroud)

性能

# create array of 1,000,000
a = np.random.randint(0, …
Run Code Online (Sandbox Code Playgroud)

numpy cython pandas

12
推荐指数
1
解决办法
1065
查看次数

如何获得两个pandas数据帧的通用索引?

我有两个pandas DataFrames df1和df2,我想转换它们,以便它们仅为2个数据帧共有的索引保留值.

DF1

                      values 1
0                            
28/11/2000          -0.055276
29/11/2000           0.027427
30/11/2000           0.066009
01/12/2000           0.012749
04/12/2000           0.113892
Run Code Online (Sandbox Code Playgroud)

DF2

                       values 2

24/11/2000            -0.004808
27/11/2000            -0.001812
28/11/2000            -0.026316
29/11/2000             0.015222
30/11/2000            -0.024480
Run Code Online (Sandbox Code Playgroud)

成为

DF1

                     value 1

28/11/2000          -0.055276
29/11/2000           0.027427
30/11/2000           0.066009
Run Code Online (Sandbox Code Playgroud)

DF2

                       value 2

28/11/2000            -0.026316
29/11/2000             0.015222
30/11/2000            -0.024480
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

12
推荐指数
3
解决办法
4052
查看次数

(熊猫):有什么区别ISIN()和包含()

我想知道我的数据帧的某些列中是否存在特定的字符串(每列的不同字符串).据我所知,isin是为数据帧编写的,但也适用于Series,而str.contains对于Series更好.其实我不明白我应该如何在两者之间做出选择.

非常感谢您的回答,我已经搜索了类似的问题,但没有找到任何解释两者之间的选择.

python dataframe pandas

4
推荐指数
1
解决办法
2789
查看次数

pyspark 数据帧的缓慢过滤

我有一个关于过滤 Pandas 和 pyspark 数据帧时的时间差的问题:

import time
import numpy as np
import pandas as pd
from random import shuffle

from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()

df = pd.DataFrame(np.random.randint(1000000, size=400000).reshape(-1, 2))
list_filter = list(range(10000))
shuffle(list_filter)

# pandas is fast 
t0 = time.time()
df_filtered = df[df[0].isin(list_filter)]
print(time.time() - t0)
# 0.0072

df_spark = spark.createDataFrame(df)

# pyspark is slow
t0 = time.time()
df_spark_filtered = df_spark[df_spark[0].isin(list_filter)]
print(time.time() - t0)
# 3.1232
Run Code Online (Sandbox Code Playgroud)

如果我将 的长度list_filter增加到 10000,那么执行时间是 0.01353 和 17.6768 秒。isin 的 Pandas 实现 …

python pandas pyspark pyspark-sql

2
推荐指数
1
解决办法
4381
查看次数

标签 统计

pandas ×6

python ×5

dataframe ×4

cython ×1

numpy ×1

pyspark ×1

pyspark-sql ×1

sql-function ×1