首页 > 解决方案 > 如何在 Pandas 数据框中的列上应用格式

问题描述

我有一个包含 90 列的 pandas 数据框,我想对每一列应用一种格式。每列都有自己的格式,具有格式的函数与列的名称相同。我想将格式应用于数据框中的每一列。

例如,假设 dv, dw 是我的数据框 df 的两列:

dv 
1
2
1
1
5
5

dw
2
2
1
3
2
3

def dv(dv):      
    if dv==1:
       return 1
    else:
       return 0

def dw(dw):
    if dw==2:
       return 1
    else:
       return 0

我正在使用以下命令:

df['dv']=df['dv'].apply(dv)

df['dw']=df['dw'].apply(dw)

输出 :

dv 
1
0
1
1
0
0


dw
1
1
0
0
1
0

问题陈述:我不想为每一列都写一个 .apply 方法,因为我有 90 列并且想要减少代码行数。

标签: pythonpandas

解决方案


您可以使用包含要修改的列的名称及其相应条件和值的字典来进行替换。然后,使用 apply 函数根据字典替换值,如下所示:

data = [
    [1, 2],
    [2, 2],
    [1, 1],
    [1, 3],
    [5, 2],
    [5, 3]
]

df = pd.DataFrame(data, columns = ["dv", "dw"])

dict_ = {
    "dv": {
        "condition": 1,
        "x": 1,
        "y": 0
    },
    "dw": {
        "condition": 2,
        "x": 1,
        "y": 0
    }
}

def func(x):
    column = x.name
    
    return np.where(x == dict_[column]["condition"], dict_[column]["x"], dict_[column]["y"])

df[dict_.keys()].apply(func)

例子:

输入:

   dv  dw
0   1   2
1   2   2
2   1   1
3   1   3
4   5   2
5   5   3

输出:

   dv  dw
0   1   1
1   0   1
2   1   0
3   1   0
4   0   1
5   0   0

推荐阅读