2015-03-04 2 views
1

У меня есть список списков, как показано нижеВыбор строк из панд DataFrame, используя список

[[1, 2], [1, 3]] 

DataFrame похож на

A B C 
0 1 2 4 
1 0 1 2 
2 1 3 0 

Я хотел бы DataFrame, если значение в колонке А равен первому элементу любого из вложенных списков, а значение в столбце B соответствующей строки равно второму элементу того же вложенного списка.

Таким образом, в результате DataFrame должен быть

A B C 
0 1 2 4 
2 1 3 0 

ответ

0

Код ниже хочу вам необходимо:

tmp_filter = pandas.DataFrame(None) #The dataframe you want 
# Create your list and your dataframe 
tmp_list = [[1, 2], [1, 3]] 
tmp_df = pandas.DataFrame([[1,2,4],[0,1,2],[1,3,0]], columns = ['A','B','C']) 

#This function will pass the df pass columns by columns and 
#only keep the columns with the value you want 
def pass_true_df(df, cond): 
    for i, c in enumerate(cond): 
     df = df[df.iloc[:,i] == c] 
    return df 

# Pass through your list and add the row you want to keep 
for i in tmp_list: 
    tmp_filter = pandas.concat([tmp_filter, pass_true_df(tmp_df, i)]) 
0
import pandas 
df = pandas.DataFrame([[1,2,4],[0,1,2],[1,3,0],[0,2,5],[1,4,0]], 
         columns = ['A','B','C']) 
filt = pandas.DataFrame([[1, 2], [1, 3],[0,2]], 
          columns = ['A','B']) 

accum = [] 

#grouped to-filter 
data_g = df.groupby('A') 
for k2,v2 in data_g: 
    accum.append(v2[v2.B.isin(filt.B[filt.A==k2])]) 

print(pandas.concat(accum)) 

результат:

A B C 
3 0 2 5 
0 1 2 4 
2 1 3 0 

(Я сделал данные и фильтр немного сложнее в качестве теста.)

Смежные вопросы