如何编写函数以动态查询熊猫数据框?

汉斯·罗洛夫森

假设我有一个pandas数据框,需要从中重复查询行的子集。我想将其包装在一个函数中。查询将有所不同,将查询任意数量的列。每列的运算符将始终相同。我正在考虑这样的事情:

df = pd.DataFrame({'A': list('aabbccddeeff'), 'B': list('aaaabbbbcccc'),
                   'C': np.random.randint(5, size=12),
                   'D': np.random.randint(9, size=12)})

def query_df(df, **kwds):
    a_val = kwds.get('a', None)
    b_val = kwds.get('b', None)
    c_val = kwds.get('c', None)        
    d_val = kwds.get('d', None)
    query = 'A in {0} and B == {1} and C > {2} and D < {3}'.format(a_val, b_val, c_val, d_val)
    return df.query(query)

query_dict = {'a':['a', 'b', 'c', 'd'], 'b':'a', 'c':0, 'd':8}
print(query_df(df, **query_dict))

A  B  C  D 
1  a  a  1  6

尽管这可行,但是它不允许仅针对列A和C的查询。所有列都被硬编码到查询字符串中!我该如何使其更加灵活,例如也可以进行以下操作:

query_df(df, {'a':['a', 'b', 'c', 'd'], 'b':'a'})
query_df(df, {'b':'a', 'c':6})
query_df(df, {'d':4})

提前致谢!

New2coding

让您知道如何实现:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': list('aabbccddeeff'), 'B': list('aaaabbbbcccc'),
                   'C': np.random.randint(5, size=12),
                   'D': np.random.randint(9, size=12)})
print(df)
def query_df(df, dicti):
    d = {
      'a' : 'A in %s' % dicti.get('a'),
      'b' : 'B == %s' % dicti.get('b'),
      'c' : 'C > %s' % dicti.get('c') ,
      'd' : 'D < %s' % dicti.get('d')
    }
    q = []
    for i, j in d.items():
      if i in dicti.keys():
        q.append(j)
        q.append(' and ')
    q = q[:len(q)-1]
    query = ''.join(q)
    print(query)
    return df.query(query)
#di = {'a':['a', 'b', 'c', 'd'], 'b':'"a"', 'c':0, 'd':8}
#di = {'b':'"a"', 'c':6}
#di = {'d':4}
di = {'a':['a', 'b', 'c', 'd'], 'b':'"a"'}
print(query_df(df, di))

您可能会注意到,我不得不对'b'键('b':'“ a”')使用双引号。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

编写函数以应用于查看问题行和上方行的熊猫数据框

如何编写函数以从熊猫每天获取每月,每周数据?

如何编写将SQL查询转换为数据框的函数

如何编写通用函数以评估Spark数据框的列中的列值

如何编写自定义函数以显示数据框中每个变量的值计数以及级别?

编写函数以将行添加到数据框

编写函数以从数据框中提取值

如何编写Java函数以返回动态类型的数组?

将数据对象转换为数据框时如何编写自定义函数以半自动进行列命名

如何编写 Azure 函数以从 Web 门户接收数据?

如何编写一个遍历大熊猫数据框组并应用分层条件的函数?

熊猫:如何查询多级列数据框?

如何查询熊猫数据框的特定属性

编写PLSQL Oracle函数以查询表

熊猫数据框查询

查询熊猫数据框

熊猫:创建1个函数以读取json,然后创建另一个函数以创建数据框

编写函数以过滤行数据框时出现问题

使用数据框从csv编写函数以读取和返回python中的列值

熊猫python:创建函数以基于定义的列列表合并两个数据框

如何动态地从熊猫数据框中过滤数据?

如何在R中编写递归函数以生成动态嵌套的for循环?

如何编写此迭代函数以递归?

如何乘法以分离数据框并应用函数以在R中获得结果的新数据框

动态熊猫数据框生成

动态合并熊猫数据框

动态过滤熊猫数据框

apply函数以pandas返回数据框

为数据框编写函数