簡體   English   中英

跨Pandas中多行和多列的布爾運算

[英]Boolean operations across multiple rows and columns in Pandas

我正在對兩列和前兩行中的True值進行測試-本質上是任一列為true或前兩個值是否應該返回true。

我想出了這個可行的方法:

Data['BS Buy Flag']=((Data['DivDown']==True) | (Data['DivDown'].shift(1)==True) | (Data['DivDown'].shift(2)==True) | (Data['KelknerDown']==True) | (Data['KelknerDown'].shift(1)==True) | (Data['KelknerDown'].shift(2)==True))

但這是如此聰明-必須有更好的方法來做到這一點...

可能不值得(從計算/內存角度而言),但是如果您的代碼損害了自尊心並使您無法入睡,則可以嘗試以下操作:

df_list = [Data['DivDown'], 
           Data['DivDown'].shift(1), 
           Data['DivDown'].shift(2), 
           Data['KelknerDown'], 
           Data['KelknerDown'].shift(1), 
           Data['KelknerDown'].shift(2)]

# Create a new df using df_list, preserving index
check_df = reduce(lambda x, y, pd.merge(x.to_frame(), y.to_frame(), left_index=True, right_index=True), df_list)

# Write over check_df with result
check_df = check_df.any(axis=1)    # Returns True if any value in a row is True

# Merge check_df to original data
Data = pd.merge(check_df.to_frame(), Data, left_index=True, right_index=True, how='inner')

現在,您應該在“數據”中有一個附加列可以檢查。 就像我說的那樣,除非您擁有非常龐大的數據集或需要跟蹤的大量條件,否則它可能不會高效。

如果需要,您還可以存儲條件進行其他分析(功能選擇,聚類等)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM