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