我有以下的Dataframe:
| 联系方式|普拉斯林|平均FGrating|
| --------------|--------------|--------------|
| 二二九四三|1|一百点四三|
| 22944|二|九十三点五|
| 二二九四五|三|一百零四点六|
| 22746|四|一百零一点三|
| 二二九四七|1|一百零二点零五分|
| 二二九四八|二|一百零七点三十五|
| 二二九四九|三|一百零九点一二|
我尝试对整个DataFrame的Average FGrating
列应用softmax
函数,而Plassering
值正在增加。这意味着我想对DataFrame的前四行应用softmax
,然后分别对接下来的3行应用softmax
,等等。
整个DataFrame大约有5000行,其结构如下。
我的第一个尝试是循环通过这个DataFrame的行,使用iterrows()
,当Plassering
增加时,将Average FGrating
值添加到列表中。当Plassering
值小于前一行的值时,我计算softmax
,将列表作为参数传递,然后清空列表,循环继续。然而,我读here,这不是一个好主意,性能明智的。
你有比我更好的主意吗?
2条答案
按热度按时间olhwl3o21#
您可以使用groupby转换。首先生成组,然后应用softmax:
结果:
nlejzf6q2#
基于
Plassering
值的连续差异(累积为单独的组)和pandas.core.groupby.DataFrameGroupBy.transform
操作: