我想知道现有的大熊猫功能,到目前为止我可能无法找到。
基本上,我有一个包含各种列的数据框。我想根据某些列的值选择特定的行(仅供参考:我对D列的值感兴趣,其中有几个参数在A-C中描述)。
E.g。我想知道哪一行有A == 1& B == 2& Ç== 5?
shouldAutorotate/supportedInterfaceOrientations/preferredInterfaceOrientationForPresentation
到目前为止,我基本上已经能够减少这个:
df
A B C D
0 1 2 4 a
1 1 2 5 b
2 1 3 4 c
df_result
1 1 2 5 b
对此:
import pandas as pd
df = pd.DataFrame({'A': [1,1,1],
'B': [2,2,3],
'C': [4,5,4],
'D': ['a', 'b', 'c']})
df_A = df[df['A'] == 1]
df_B = df_A[df_A['B'] == 2]
df_C = df_B[df_B['C'] == 5]
产生了相同的结果。但我想知道是否还有另一种方式?也许在一行中没有循环?
答案 0 :(得分:1)
您可以使用query()
方法过滤数据,并使用
In [288]: df.query(' and '.join(['{0}=={1}'.format(x[0], x[1]) for x in parameter]))
Out[288]:
A B C D
1 1 2 5 b
详细
In [296]: df
Out[296]:
A B C D
0 1 2 4 a
1 1 2 5 b
2 1 3 4 c
In [297]: query = ' and '.join(['{0}=={1}'.format(x[0], x[1]) for x in parameter])
In [298]: query
Out[298]: 'A==1 and B==2 and C==5'
In [299]: df.query(query)
Out[299]:
A B C D
1 1 2 5 b
答案 1 :(得分:0)
如果其他人感兴趣的话,我会这样做:
import numpy as np
matched = np.all([df[vn] == vv for vn, vv in parameters], axis=0)
df_filtered = df[matched]
但我更喜欢query
功能,现在我已经看过@John Galt了。