簡體   English   中英

如何根據多個條件動態創建列

[英]How to dynamically create columns based on multiple conditions

所以我遇到了以下問題:

我有一個 dataframe 就像下面的一樣,其中time_diff_float是每行與上面行之間的時間差(以分鍾為單位)。 因此,例如,在value = 1 20 分鍾后我有value = 4

value | time_diff_float
1       NaN
4       20
3       13
2       55
5       08
7       15

首先,我必須檢查兩行之間的時間差是否 < 60(一小時),並使用公式rem = value (from row above) * lambda ** time difference between 2 rows創建一列。 我的 lambda 是一個常數,值為 0.97。

然后,如果每行和上面 2 行之間的時間差仍然低於 60,我必須重新做同樣的事情,比較每行和上面的 2 行。 然后我必須做同樣的事情比較上面的 3 行等等。

為此,我編寫了以下代碼:

df.loc[df['time_diff_float'] < 60, 'rem_1'] = df['value'].shift() * (lambda_ ** (df['time_diff_float'] - 1))
df.loc[df['time_diff_float'] + df['time_diff_float'].shift() < 60, 'rem_2'] = df['value'].shift(2) * (lambda_ ** (df['time_diff_float'] + df['time_diff_float'].shift() - 1))
df.loc[df['time_diff_float'] + df['time_diff_float'].shift() + df['time_diff_float'].shift(2) < 60, 'rem_3'] = df['value'].shift(3) * (lambda_ ** (df['time_diff_float'] + df['time_diff_float'].shift() + df['time_diff_float'].shift(2) - 1))

我的問題是:由於我必須使用我擁有的實際值至少重新執行此操作 10 次(甚至更多),有沒有辦法動態創建“rem 列”?

提前致謝!

您可以保存數據掩碼,然后在每次循環中更新它:

n = 3
for i in range(1, n):
    if (i==1):
        mask = df['time_diff_float']
        df.loc[mask, 'rem_' +str(i)] = df['value'].shift() * (lambda_ ** (mask - 1))

    else:
        mask += df['time_diff_float'].shift(i-1)
        df.loc[mask < 60, 'rem_'+str(i)] = df['value'].shift(i) * (lambda_ ** (mask - 1))

暫無
暫無

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

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