我将创建一些测试数据:
import numpy as np
import pandas as pd
test_df = pd.DataFrame(np.random.randn(10,4), columns=['a','b','c','d'])
我要传递给列变量的函数是:
def standard(x):
return (x - x.mean()) / x.std()
然后我要做的是使用for循环在每个列变量上运行函数standard
,并将新列添加到具有标准化数据的数据框中。
但是,除了使for循环简单之外,我之前从未真正做过这样的事情。因此,任何指针将不胜感激。
答案 0 :(得分:1)
您可以这样做:
for column in test_df:
print(standard(test_df[column]))
答案 1 :(得分:1)
您可以将函数应用于每个列,如下所示:
std_df = test_df.apply(standard,axis = 1)]
您可以像这样将其隐藏在原始框架中:
big_df = pd.concat([ test_df, std_df], axis = 1)
为简化起见,您可以将它们同时运行:
test_df = pd.concat([ test_df, test_df.apply(standard,axis = 1)], axis = 1)
答案 2 :(得分:1)
如果要使用一行,这里确实在原始/源数据帧上应用了该函数,那么lambda函数将完成技巧(,将匿名函数作为参数传递给apply() ):
test_df.apply(lambda x: (x - x.mean()) / x.std(), axis =1)
Out: a b c d 0 -0.381437 0.090135 -1.038400 1.329702 1 -0.722698 0.902806 0.817258 -0.997366 2 -0.521621 1.375428 -0.912505 0.058698 3 0.161679 0.900105 0.363529 -1.425313 4 -0.605061 0.527289 -1.045744 1.123515 5 -1.271155 0.481572 -0.253487 1.043071 6 -0.473747 -0.471403 -0.553750 1.498901 7 0.161580 1.335381 -0.935835 -0.561127 8 1.355149 -0.372754 0.029416 -1.011811 9 -1.065852 1.253947 0.276011 -0.464105
对于:“如何通过数据框的列循环功能并添加到新列”,您可以使用pandas.DataFrame.join将源数据框
test_df
与新列standardized form columns
连接起来将具有新名称:
test_df.join(test_df.apply(lambda x: (x - x.mean()) / x.std(), axis =1), rsuffix='_std')
a b c d a_std b_std c_std d_std 0 -0.142156 0.239129 -0.673335 1.241366 -0.381437 0.090135 -1.038400 1.329702 1 -0.726785 0.668620 0.595182 -0.962573 -0.722698 0.902806 0.817258 -0.997366 2 -1.212991 0.384315 -1.542113 -0.724365 -0.521621 1.375428 -0.912505 0.058698 3 0.366151 0.897416 0.511373 -0.775619 0.161679 0.900105 0.363529 -1.425313 4 -0.248543 0.830104 -0.668326 1.398053 -0.605061 0.527289 -1.045744 1.123515 5 -1.001275 0.695089 -0.016333 1.238530 -1.271155 0.481572 -0.253487 1.043071 6 -0.850323 -0.848182 -0.923375 0.950963 -0.473747 -0.471403 -0.553750 1.498901 7 0.337371 0.688291 0.009287 0.121310 0.161580 1.335381 -0.935835 -0.561127 8 1.976673 -0.953941 -0.271841 -2.037817 1.355149 -0.372754 0.029416 -1.011811 9 -1.795365 0.058748 -0.722873 -1.314415 -1.065852 1.253947 0.276011 -0.464105