关于如何从像这样的数据框中制作干净代码的任何想法
import pandas as pd
df = pd.DataFrame(list(zip(['Ricardo','Andres','Andres'],[1,2,2])),columns=['name','id'])
df
Out[5]:
name id
0 Ricardo 1
1 Andres 2
2 Andres 2
进行类似的查询
((name == 'Ricardo') | (name == 'Andres') ) & ( (id == 1) | (id ==2) )
就像所有列的唯一值都由|连接。运算符以及由&&运算符连接的运算符...我已经在数据上使用了迭代,但是代码很丑陋
答案 0 :(得分:0)
这是使用数据帧df
的定义的一种方法。
mask = df['name'].isin({'Andres', 'Ricardo'}) & df['id'].isin({1, 2})
df[mask]
name id
0 Ricardo 1
1 Andres 2
2 Andres 2
答案 1 :(得分:0)
这是我能得到的清洁工...
query = []
for field, values in df.stack().reset_index().drop_duplicates(subset=['level_1',0]).groupby('level_1'):
query.append( '('+('('+str(field)+' == '+values[0].astype(str)+')').str.cat(sep = ' | ')+' )' )
' & '.join (query)
Out[29]: '((id == 1) | (id == 2) ) & ((name == Ricardo) | (name == Andres) )'