我有以下函數來獲取行的最後一個非零值的列名
import pandas as pd
def myfunc(X, Y):
df = X.iloc[Y]
counter = len(df)-1
while counter >= 0:
if df[counter] == 0:
counter -= 1
else:
break
return(X.columns[counter])
使用以下代碼示例
data = {'id': ['1', '2', '3', '4', '5', '6'],
'name': ['AAA', 'BBB', 'CCC', 'DDD', 'EEE', 'GGG'],
'A1': [1, 1, 1, 0, 1, 1],
'B1': [0, 0, 1, 0, 0, 1],
'C1': [1, 0, 1, 1, 0, 0],
'A2': [1, 0, 1, 0, 1, 0]}
df = pd.DataFrame(data)
df
myfunc(df, 5) # 'B1'
我想知道如何將此函數應用於數據框中的所有行,並將結果放入 df
我正在考慮遍歷所有行(這可能不是一個好方法)或將 lambdas 與 apply 函數一起使用。但是,我沒有成功採用最後一種方法。有什麼幫助嗎?
我稍微修改了您的函數以跨行工作:
def myfunc(row):
counter = len(row)-1
while counter >= 0:
if row[counter] == 0:
counter -= 1
else:
break
return row.index[counter]
現在只需調用df.apply
您的函數並axis=1
為數據幀的每一行調用該函數:
>>> df.apply(myfunc, axis=1)
0 A2
1 A1
2 A2
3 C1
4 A2
5 B1
dtype: object
但是,您可以放棄自定義函數並使用此代碼以更快、更簡潔的方式執行您正在尋找的操作:
>>> df[df.columns[2:]].T.cumsum().idxmax()
0 A2
1 A1
2 A2
3 C1
4 A2
5 B1
dtype: object
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句