python - 在 pandas 数据帧上使用转换函数,向数据帧的每一行返回新值
问题描述
我想对我拥有的数据框的每一行应用一个函数。数据框的片段是这样的:
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
:
def test(df):
x_list = df.values
y_list = []
for x in x_list:
y = math.sin(x/1000)*2000
return y
为此,我使用如下变换函数:
df['Fit'] = df.groupby(level=0)['Lose_Percentage'].transform(test)
问题是它为列的每一行返回相同的值df['Fit']
。我希望它返回从该行中获取的值 df['Lose_Percentage']
并将其添加到新 df['Fit']
列中。
如果这样做正确,该df['Fit']
列将包含 index 的值112335580
:
[1.499999859375004, 1.6063624685814168, 1.6862587304992693, 1.6993154622916136, 1.742800855666326, 1.8295287282081318, 1.9190120053704878, 1.992593313611782]
我试图调整这样的功能:
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
推荐阅读
- javascript - 如何在提交时返回第二份注册表?
- oracle - LiveSQL 不断向我显示:ORA-00933:SQL 命令未正确结束
- javascript - 从输入下拉菜单转到 URL
- javascript - Vuex 状态一直说它未定义
- bash - 在 bash shell 脚本中使用时,多行变量不适用于参数
- php - 在 Flatsome - Woocommerce 上更改简码 ux_product_categories 的产品类别标题标签
- sql - R DBI 不支持的列类型 ANYDATA
- computer-vision - Google Colab:“有没有办法使用网络摄像头流式传输视频并进行处理?”
- angular - 如何从这个调用外部 API 的 Angular 服务方法正确返回 Promise?
- javascript - 我们如何在 2020 年使用带有 Web Speech API 的流?