我有一个动态的情况,我想按照波纹管逻辑过滤数据。
dynamic_cols = ['A', 'B'. ...]
dynamic_values = [1,2,...]
data_frame.LOC[data_frame[dynamic_cols == dynamic_values ]]
我用过熊猫和numpy。
对此有任何建议吗?
例如:在以上情况下,我想过滤A=1 and Column B=2
答案 0 :(得分:2)
在list comprehension
创建的所有掩码中使用np.logical_and + reduce或创建助手DataFrame
和merge
:
df = pd.DataFrame({
'A':[1,2,4,1,5,4],
'B':[2,8,9,2,2,3],
'C':[3,3,5,3,1,0],
})
print (df)
A B C
0 1 2 3
1 2 8 3
2 4 9 5
3 1 2 3
4 5 2 1
5 4 3 0
dynamic_cols = ['A','B','C']
dynamic_values = [1, 2, 3]
m = np.logical_and.reduce([df[a] == b for a, b in (zip(dynamic_cols, dynamic_values))])
df1 = df[m]
print (df1)
A B C
0 1 2 3
3 1 2 3
df2 = pd.DataFrame([dynamic_values], columns=dynamic_cols)
df1 = df.merge(df2)
print (df1)
A B C
0 1 2 3
3 1 2 3