給定一個資料框df,如下所示:
df = pd.DataFrame([{'date': '2021-10-1',
'pct1': -0.039473959,
'pct2': -0.039473959,
'pct3': -0.032095057,
'pct4': -0.106310578,
'pct5': -0.039473959},
{'date': '2021-10-2',
'pct1': 0.222111128,
'pct2': 0.042484279,
'pct3': 0.108269001,
'pct4': -0.050188884,
'pct5': 0.042484279},
{'date': '2021-10-3',
'pct1': -0.0131719,
'pct2': 0.051357438,
'pct3': 0.051357438,
'pct4': 0.130772264,
'pct5': 0.051357438},
{'date': '2021-10-4',
'pct1': 0.092982799,
'pct2': 0.092982799,
'pct3': 0.092982799,
'pct4': 0.147102302,
'pct5': 0.092982799}])
出去:
date pct1 pct2 pct3 pct4 pct5
0 2021-10-1 -0.039474 -0.039474 -0.032095 -0.106311 -0.039474
1 2021-10-2 0.222111 0.042484 0.108269 -0.050189 0.042484
2 2021-10-3 -0.013172 0.051357 0.051357 0.130772 0.051357
3 2021-10-4 0.092983 0.092983 0.092983 0.147102 0.092983
我希望根據以下邏輯逐行計算值的數量:
- 如果值在 的區間內
-0.02 ≤ x ≤ 0.02,則計數到keep_same列; - 如果值在 的區間內
x < -0.02,則計數到decrease列; - 如果值在 的區間內
x > 0.02,則計數到increase列;
預期的結果將是:
date decrease keep_same increase
0 2021-10-1 5 0 0
1 2021-10-2 1 0 4
2 2021-10-3 0 1 4
3 2021-10-4 0 0 5
我的想法如下,第一步根據上述條件用0、-1和1替換df的值,然后按行計算它們:
pct_df = df.filter(regex='^pct')
conds = [pct_df.values > 0.02, -0.02 <= pct_df.values <= 0.02, pct_df.values < -0.02]
choices = [1, 0, -1]
pd.DataFrame(np.select(conds, choices, default=np.NaN),
index=pct_df.index,
columns=pct_df.columns)
我怎么能做到這一點?謝謝。
uj5u.com熱心網友回復:
For 條件必須&在值之間通過for 鏈接,然后定義新的列名,并在回圈中分配計數 by sum,因為新的 DataFrame 僅在date列上過濾:
pct_df = df.filter(regex='^pct')
conds = [pct_df.values > 0.02,
(pct_df.values >= -0.02) & (pct_df.values <= 0.02),
pct_df.values < -0.02]
cols = ['decrease', 'keep_same', 'increase']
df1 = df[['date']].copy()
for c, m in zip(cols, conds):
df1[c] = m.sum(axis=1)
print (df1)
date decrease keep_same increase
0 2021-10-1 0 0 5
1 2021-10-2 4 0 1
2 2021-10-3 4 1 0
3 2021-10-4 5 0 0
uj5u.com熱心網友回復:
如果您對一一分配這些沒有問題,您可以簡單地使用
df['decrease'] = (pct_df.values < -0.02).sum(axis=1)
df['keep_same'] = (-0.02 <= pct_df.values <= 0.02).sum(axis=1)
df['increase'] = (pct_df.values > 0.02).sum(axis=1)
您已經創建了布林值。對軸 1 求和使您的行式計算完成。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/349873.html
