如何在pandas切片上应用lambda函数,并返回与输入数据框相同的格式?

时间:2014-11-16 04:42:11

标签: python pandas

我想将函数应用于pandas中每行的数据帧行切片,并返回一个数据帧,其中每行包含计算的切片的值和数量。 所以,例如

df = pandas.DataFrame(numpy.round(numpy.random.normal(size=(2, 10)),2))
f = lambda x: (x - x.mean())

我想要的是从第0列到第5列以及第5列到第10列应用lambda函数f。 我这样做了:

a = pandas.DataFrame(f(df.T.iloc[0:5,:])

但这仅适用于第一个切片..如何在代码中包含第二个切片,以便我的结果输出框看起来与输入框完全一样 - 只是将每个数据点更改为其值减去均值相应的切片。

我希望这是有道理的..采用这种方法的正确方法是什么?

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以简单地将结果重新分配给原始df,如下所示:

import pandas as pd
import numpy as np


# I'd rather use a function than lambda here, preference I guess
def f(x):
    return x - x.mean()


df = pd.DataFrame(np.round(np.random.normal(size=(2,10)), 2))

df.T 
      0     1
0  0.92 -0.35
1  0.32 -1.37
2  0.86 -0.64
3 -0.65 -2.22
4 -1.03  0.63
5  0.68 -1.60
6 -0.80 -1.10
7 -0.69  0.05
8 -0.46 -0.74
9  0.02  1.54

# makde a copy of df here
df1 = df

# just reassign the slices back to the copy
# edited, omit DataFrame part.
df1.T[:5], df1.T[5:] = f(df.T.iloc[0:5,:]), f(df.T.iloc[5:,:])

df1.T
       0     1
0  0.836  0.44
1  0.236 -0.58
2  0.776  0.15
3 -0.734 -1.43
4 -1.114  1.42
5  0.930 -1.23
6 -0.550 -0.73
7 -0.440  0.42
8 -0.210 -0.37
9  0.270  1.91