熊猫:将功能列表应用于列,每列一个功能

时间:2020-02-24 14:03:22

标签: python-3.x pandas

设置:对于具有10列的数据帧,我列出了希望以function1(column1), function2(column2), ..., function10(column10)方式应用的10个函数。我研究了pandas.DataFrame.applypandas.DataFrame.transform,但它们似乎广播了每个函数并将其应用于所有可能的列。

4 个答案:

答案 0 :(得分:2)

IIUC,带有zip和一个for循环:

示例

def function1(x):
    return x + 1

def function2(x):
    return x * 2

def function3(x):
    return x**2

df = pd.DataFrame({'A': [1, 2, 3], 'B': [1, 2, 3], 'C': [1, 2, 3]})
functions = [function1, function2, function3]

print(df)

#    A  B  C
# 0  1  1  1
# 1  2  2  2
# 2  3  3  3


for col, func in zip(df, functions):
    df[col] = df[col].apply(func)

print(df)

#    A  B  C
# 0  2  2  1
# 1  3  4  4
# 2  4  6  9

答案 1 :(得分:1)

您可以执行以下操作:

S::bar

答案 2 :(得分:1)

您可以尝试使用包含Series的lambda来将N个函数映射到每一行,并检查以下代码:

import pandas as pd

matrix = [(22, 34, 23), (33, 31, 11), (44, 16, 21), (55, 32, 22), (66, 33, 27),
(77, 35, 11)]

df = pd.DataFrame(matrix, columns=list('xyz'), index=list('abcdef'))

会产生:

    x   y   z
a  22  34  23
b  33  31  11
c  44  16  21
d  55  32  22
e  66  33  27
f  77  35  11

然后:

res_df = df.apply(lambda row: pd.Series([row[0] + 1, row[1] + 2, row[2] + 3]), axis=1)

会给您:

    0   1   2
a  23  36  26
b  34  33  14
c  45  18  24
d  56  34  25
e  67  35  30
f  78  37  14

答案 3 :(得分:0)

您只需将其应用于特定列

$ path/to/venv/bin/python -m pip show --files Pillow