將函數應用於 Pandas 數據幀 (lambda) 中的所有行

月亮289

我有以下函數來獲取行的最後一個非零值的列名

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 函數一起使用。但是,我沒有成功採用最後一種方法。有什麼幫助嗎?

用戶17242583

我稍微修改了您的函數以跨行工作:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

將函數應用於文件並輸出到數據幀的各個行

應用對行子集上的 Pandas 數據幀進行操作的函數

用於將函數應用於 Pandas DataFrame 中的每一行的應用函數的替代方法

在同一個 Pandas 數據幀中的 groupby 上應用 softmax 函數

將 lambda 函數中的多個條件應用於多列的問題

是否有 Pandas 函數可以將數據幀元素的數據類型作為新數據幀獲取?

將函數應用於 DataFrame 中的列

除數據幀中的 lambda 函數外,作為 try 的函數

Pandas 中是否有一個函數可以查找數據幀行中某些數據的“間隙”?

如何將函數應用於數據幀,然後應用於數據幀列表?

如何將函數應用於函數中向量中列出的多列

如何將我的函數應用於 JSON 文件中的所有值?

R:避免在使用應用函數時將單行數據幀轉換為向量

lambda 表達式 v. for 循環遍歷 Pandas 數據幀中的特定列

由於 for 循環,將更改應用於 dict 中的數據幀:怎麼做?

如何將 Pandas 數據幀列中的所有值轉換為帶有計數的新列?

在 Pandas 數據幀上執行中值分割

Pandas:從較小的數據幀中減去一個數據幀:行外重新開始

使用 group by 將聚合函數應用於表上的所有列

如何將 pandas.qcut 應用於 Python 數據框中的每一列

如何在 Pandas 數據幀上創建適用於所有情況的索引?

用於計算數據幀中月份日期的 Python 函數

Pandas 拆分數據幀並獲取數據行的其餘部分

如何在 R 中的單個數據幀上迭代應用函數?

將函數應用於 csv 文件中的每一行

將 Apps 腳本函數應用於 Google 表格中的其他行

按索引將數據幀中標題的值分配給數據幀中的所有行

根據列的值將 Pandas 數據幀拆分為多個數據幀

Pandas 數據幀上的 SUMIF 函數