我想将函数应用于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,:])
但这仅适用于第一个切片..如何在代码中包含第二个切片,以便我的结果输出框看起来与输入框完全一样 - 只是将每个数据点更改为其值减去均值相应的切片。
我希望这是有道理的..采用这种方法的正确方法是什么?
谢谢。答案 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