Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.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 定义基于其他列(熊猫)创建列的函数_Python_Pandas - Fatal编程技术网

Python 定义基于其他列(熊猫)创建列的函数

Python 定义基于其他列(熊猫)创建列的函数,python,pandas,Python,Pandas,我的数据框如下所示: +----------+-----------+-------------+--------------+-----------+------------+----------+-----------+------------------+-------------------+--------+-----------------+--------------------+-----------------+------------------+--------------

我的数据框如下所示:

+----------+-----------+-------------+--------------+-----------+------------+----------+-----------+------------------+-------------------+--------+-----------------+--------------------+-----------------+------------------+-------------------------+
| GOD_prob |  GOD_odd  | market_prob | market_price | goat_prob | goat_price | mug_prob | mug_price | mug_payback_prob | mug_payback_price | is_won | GOD_brier_score | market_brier_score | mug_brier_score | goat_brier_score | mug_payback_brier_score |
+----------+-----------+-------------+--------------+-----------+------------+----------+-----------+------------------+-------------------+--------+-----------------+--------------------+-----------------+------------------+-------------------------+
| 0.31     | 3.225806  | 0.301941    | 3.311901     | 0.317631  | 3.148305   | 0.287306 | 3.480606  | 0.320741         | 3.117783          |      0 | 0.0961          | 0.091169           | 0.082545        | 0.100890         | 0.102875                |
| 0.19     | 5.263158  | 0.198653    | 5.033894     | 0.190179  | 5.258196   | 0.211225 | 4.734293  | 0.208422         | 4.797962          |      0 | 0.0361          | 0.039463           | 0.044616        | 0.036168         | 0.043440                |
| 0.02     | 50.000000 | 0.019226    | 52.013855    | 0.019889  | 50.280105  | 0.018166 | 55.048066 | 0.023553         | 42.457316         |      0 | 0.0004          | 0.000370           | 0.000330        | 0.000396         | 0.000555                |
| 0.55     | 1.818182  | 0.545992    | 1.831530     | 0.550391  | 1.816891   | 0.575588 | 1.737355  | 0.618493         | 1.616833          |      1 | 0.2025          | 0.206124           | 0.180126        | 0.202149         | 0.145548                |
| 0.33     | 3.030303  | 0.376325    | 2.657279     | 0.341564  | 2.927710   | 0.326000 | 3.067480  | 0.276040         | 3.622663          |      0 | 0.1089          | 0.141620           | 0.106276        | 0.116666         | 0.076198                |
+----------+-----------+-------------+--------------+-----------+------------+----------+-----------+------------------+-------------------+--------+-----------------+--------------------+-----------------+------------------+-------------------------+
样本数据:

GOD_prob,GOD_odd,market_prob,market_price,goat_prob,goat_price,mug_prob,mug_price,mug_payback_prob,mug_payback_price,is_won,GOD_brier_score,market_brier_score,mug_brier_score,goat_brier_score,mug_payback_brier_score
0.31,3.225806,0.301941,3.311901,0.317631,3.148305,0.287306,3.480606,0.320741,3.117783,0,0.0961,0.091169,0.082545,0.100890,0.102875
0.19,5.263158,0.198653,5.033894,0.190179,5.258196,0.211225,4.734293,0.208422,4.797962,0,0.0361,0.039463,0.044616,0.036168,0.043440
0.02,50.000000,0.019226,52.013855,0.019889,50.280105,0.018166,55.048066,0.023553,42.457316,0,0.0004,0.000370,0.000330,0.000396,0.000555
0.55,1.818182,0.545992,1.831530,0.550391,1.816891,0.575588,1.737355,0.618493,1.616833,1,0.2025,0.206124,0.180126,0.202149,0.145548
0.33,3.030303,0.376325,2.657279,0.341564,2.927710,0.326000,3.067480,0.276040,3.622663,0,0.1089,0.141620,0.106276,0.116666,0.076198
我创建了一个函数来返回一个基于另一列的值,但是我希望这个函数在参数中包含列的名称,所以我不必为每一列编写类似的函数。 我的职能如下:

def GOD_gross(row):
    if row['is_won'] == 1:
        return (row["GOD_odd"] - 1) * (-1)
    else:
        return 0
然后我使用以下方法应用:

df["GOD_gross"] = df.apply(GOD_gross, axis=1)
我基本上希望对“mug_price”、“market_price”和“goat_price”列执行相同的操作,而不必以类似的方式编写相同的函数(只需更改列名)


谢谢

使用矢量化解决方案和广播布尔掩码:

cols = ['GOD_odd','mug_price','market_price','goat_price']
mask = df['is_won'] == 1

df[cols] = np.where(mask[:, None], (df[cols] - 1) * -1, 0)
详细信息

print (mask[:, None])
[[False]
 [False]
 [False]
 [ True]
 [False]]

print (np.where(mask[:, None], (df[cols] - 1) * -1, 0))
[[ 0.        0.        0.        0.      ]
 [ 0.        0.        0.        0.      ]
 [ 0.        0.        0.        0.      ]
 [-0.818182 -0.737355 -0.83153  -0.816891]
 [ 0.        0.        0.        0.      ]]


耶斯雷尔,严肃的问题。您总是能够如此快速地复制原始数据。怎么用?您是否复制粘贴给定数据并使用一些vim魔法或其他东西?@TomWojcik-不,它正在textpad中处理-删除
+-|
,所以速度不是很快;)哦,这是有道理的。不管怎样,你总是那么快!谢谢你的回答。
print (df)
   GOD_prob   GOD_odd  market_prob  market_price  goat_prob  goat_price  \
0      0.31  0.000000     0.301941       0.00000   0.317631    0.000000   
1      0.19  0.000000     0.198653       0.00000   0.190179    0.000000   
2      0.02  0.000000     0.019226       0.00000   0.019889    0.000000   
3      0.55 -0.818182     0.545992      -0.83153   0.550391   -0.816891   
4      0.33  0.000000     0.376325       0.00000   0.341564    0.000000   

   mug_prob  mug_price  mug_payback_prob  mug_payback_price  is_won  \
0  0.287306   0.000000          0.320741           3.117783       0   
1  0.211225   0.000000          0.208422           4.797962       0   
2  0.018166   0.000000          0.023553          42.457316       0   
3  0.575588  -0.737355          0.618493           1.616833       1   
4  0.326000   0.000000          0.276040           3.622663       0   

   GOD_brier_score  market_brier_score  mug_brier_score  goat_brier_score  \
0           0.0961            0.091169         0.082545          0.100890   
1           0.0361            0.039463         0.044616          0.036168   
2           0.0004            0.000370         0.000330          0.000396   
3           0.2025            0.206124         0.180126          0.202149   
4           0.1089            0.141620         0.106276          0.116666   

   mug_payback_brier_score  
0                 0.102875  
1                 0.043440  
2                 0.000555  
3                 0.145548  
4                 0.076198