我從到達和離開日期的資料框中創建了一個包含日期和每個月天數的資料框。這個資料框可以是 n 列長。
2021-01 2021-02 2021-03
0 0 0 4
1 0 2 1
2 0 5 0
3 0 4 4
4 10 2 0
我想要做的是:選擇具有非零值的最后一列并減去 1。
之后基本上看起來像這樣:
2021-01 2021-02 2021-03
0 0 0 3
1 0 2 0
2 0 4 0
3 0 4 3
4 10 1 0
我曾嘗試將 numpy 用于:
df2 = df2[np.arange(df2.shape[0]),(df2!=0).cumsum(1).argmax(1)] - 1
但這似乎不適用于熊貓。
uj5u.com熱心網友回復:
獲取零行然后過濾并只保留索引最低的行
has_zero = df.eq(0, axis=0)
all_zero_rows = has_zero.dot(df.columns.str.split())
col_to_replace = all_zero_rows.explode().drop_duplicates(keep="last").sort_index()[0]
df.loc[df.index[-1], col_to_replace] = df.loc[df.index[-1], col_to_replace] -1
print(df)
2021-01 2021-02 2021-03
0 0 0 3
1 0 2 0
2 0 4 0
3 0 4 3
4 10 1 0
uj5u.com熱心網友回復:
您的意思是始終選擇具有至少一個非零值的最后一列或最后一列嗎?
編輯:好的,這里有一個可能的解決方案。我在一個 numpy 陣列上這樣做是因為在資料幀上進行計算可能會有問題。
import numpy as np
import pandas as pd
list = [[0,0,4],[0,2,1],[0,5,0],[0,4,4],[10, 2, 0]]
nplist = np.array(list)
lastcol = np.where(nplist[:,-1]==0, nplist[:,-1], nplist[:,-1] - 1)
nplist[:,-1] = lastcol
df = pd.Dataframe(nplist, index=['2021-01', '2021-02', '2021-03'])
nplist
array([[ 0, 0, 3],
[ 0, 2, 0],
[ 0, 5, 0],
[ 0, 4, 3],
[10, 2, 0]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/387659.html
下一篇:log4javascript是否容易受到ApacheLog4j(Java日志庫)遠程代碼執行CVE-2021-44228的影響?
