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