2016-12-06 37 views
0

我試圖撰寫sqlalchemy.sql.and_的一系列值傳遞給sqlalchemy.sql.or_方法在查詢過濾器。這似乎工作的大部分時間,但我已經不是創建一個pandas.Series,我df.apply以下其中創建pandas.DataFrameDataFrame.apply返回數據幀時系列(sqlalchemy.sql.and_值)預計

s = df.apply(lambda row: and_(row[c.name] == c for c in where_cols), axis=1) 

當我檢查一個案例該類型在此行中,我得到:

type(c)     # returns sqlalchemy.sql.schema.Column 
type(row[c.name] == c) # returns sqlalchemy.sql.elements.BinaryExpression 
type(s)     # returns pandas.DataFrame, where column headers are all c.name values 

從我df.apply下游,該系列產品的使用方法如下:

or_list = s.tolist() 
s = session.query(
    *select_cols 
).filter(
    or_(*or_list) 
).statement 

我想知道爲什麼我的df.apply在這種情況下返回一個DataFrame。或者,更直接地說,爲什麼DataFrame.apply將sqlalchemy.sql.and_返回值解釋爲多個值?並且,在此解釋期間,如何確定標題爲c.name(在該數據幀中的列標題被標記爲c.name,其中值爲row [c.name] == c)?

回答

0

下解決了這個問題:

s = df.apply(lambda row: and_(wc.__eq__(row[c.name]) for c in where_cols), axis=1) 

如果有人解釋__eq__==比較操作之間的差異,因爲他們通過編輯該解決方案涉及到我的問題,我會愛知道。謝謝!