【问题标题】:Applying a function to dataframe with index and columns names as arguments将函数应用于以索引和列名作为参数的数据框
【发布时间】:2021-03-15 23:25:44
【问题描述】:

考虑一个空数据框 (df),其中国家作为索引,状态作为列。

df = pd.DataFrame({'Country': ['Albania', 'France', 'Mexico', 'Russia'], 
                               'On': [0, 0, 0, 0],
                               'Off': [0, 0, 0, 0]}).set_index('Country')

如何将函数应用于数据框中的每个单元格,并将索引名称和列名称作为函数的参数?我想用可以使它工作的语法替换 row(x) 和 column(x)。

df = df.apply(lambda x : function(row(x), column(x)))

谢谢

【问题讨论】:

    标签: python pandas dataframe apply


    【解决方案1】:

    你可以这样做

    def fct(row):
        # You can get index with row.name
        print(row.name)
        
        # You can set separately row["On"] and row["Off"]
        print(row["On"])
        print(row["Off"])
        row["On"] = row["On"] + 1
        row["Off"] = row["Off"] + 2
        return row
        
        
    dff = df.apply(fct, axis=1)
    

    编辑:如果您确实需要使用依赖于行和列的函数,这个解决方案是否适合您?

    def f2(row, col):
        # ...
    
    def fct(row):
        # You can get index with row.name
        row_name = row.name
        for column_name in row.index.values:
            row[v] = f2(row_name, column_name)
        return row
        
        
    dff = df.apply(fct, axis=1)
    

    【讨论】:

    • 该函数接受两个参数(行名、列名)来确定给定单元格的值。如何在 apply() 方法中调用它?
    • 查看编辑,是不是你需要的更多?
    • 也许 .apply() 不是正确的方法。我需要将带有两个参数(行名和列名)的函数应用于表的每个元素。
    • 嗯,如果您要应用的函数是f2()(请参阅答案中的编辑),您不能只创建一个包装函数(fct()),它将在@987654325 之间建立链接@ 和 f2()?
    猜你喜欢
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多