Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在dataframe上使用transform函数,将新值返回到dataframe的每一行_Python_Pandas_Dataframe_Transform - Fatal编程技术网

Python 在dataframe上使用transform函数,将新值返回到dataframe的每一行

Python 在dataframe上使用transform函数,将新值返回到dataframe的每一行,python,pandas,dataframe,transform,Python,Pandas,Dataframe,Transform,我想对数据帧的每一行应用一个函数。dataframe的一个片段如下所示: import pandas as pd import numpy as np import math data = {'EVENT_ID': [112335580,112335580,112335580,112335580,112335580,112335580,112335580,112335580, 112335582, 112335582,112335582,112335

我想对数据帧的每一行应用一个函数。dataframe的一个片段如下所示:

import pandas as pd
import numpy as np
import math


data = {'EVENT_ID': [112335580,112335580,112335580,112335580,112335580,112335580,112335580,112335580, 112335582,
                     112335582,112335582,112335582,112335582,112335582,112335582,112335582,112335582,112335582,
                     112335582,112335582,112335582],

 'SELECTION_ID': [6356576,2554439,2503211,6297034,4233251,2522967,5284417,7660920,8112876,7546023,8175276,8145908,
                  8175274,7300754,8065540,8175275,8106158,8086265,2291406,8065533,8125015],

 'BSP': [5.080818565,6.651493872,6.374683435,24.69510797,7.776082305,11.73219964,270.0383021,4,8.294425408,335.3223613,
         14.06040142,2.423340019,126.7205863,70.53780982,21.3328554,225.2711962,92.25113066,193.0151362,3.775394142,
         95.3786641,17.86333041],

  'WIN_LOSE':[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0]}

df = pd.DataFrame(data, columns=['EVENT_ID', 'SELECTION_ID', 'BSP','WIN_LOSE'])

df = df.sort_values(["EVENT_ID","BSP"])
df.set_index(['EVENT_ID', 'SELECTION_ID'], inplace=True)

df['Win_Percentage'] = 1/df['BSP']

df['Lose_Percentage'] = 1 - df['Win_Percentage']
我想对Lose_Percentage列应用以下函数:

为此,我使用如下转换函数:

df['Fit'] = df.groupby(level=0)['Lose_Percentage'].transform(test)
def test(df):

    x_list = df.values

    y_list = []

    for x in x_list:
        y = math.sin(x/1000)*2000

        y_list.append(y)

    for fit in y_list:

        return fit
问题是它为df['Fit']列的每一行返回相同的值。我希望它返回df['Lose_Percentage']列上该行的值,并将其添加到新的df['Fit']列中

如果操作正确,df['Fit']列将包含索引112335580的值:

我已经尝试过这样调整功能:

df['Fit'] = df.groupby(level=0)['Lose_Percentage'].transform(test)
def test(df):

    x_list = df.values

    y_list = []

    for x in x_list:
        y = math.sin(x/1000)*2000

        y_list.append(y)

    for fit in y_list:

        return fit

但是,这将返回与上一次尝试相同的结果。我还尝试更改return命令的缩进,但这也不起作用。

信不信由你,你想要的是

df['Fit'] = np.sin(df['Lose_Percentage'] / 1000) * 2000

啊。。。熊猫非常简单。