<p>试试这个:</p>
<pre><code>df=pd.DataFrame([['A', 80], ['A', 64], ['A', 55], ['B', 56], ['B', 89], ['B', 73], ['C', 78], ['C', 100], ['C', 150], ['C', 76], ['C', 87]], columns=['Well', 'GR'])
a=[]
for i in np.unique(df['Well']):
x=pd.DataFrame(df['GR']-df['GR'][df['Well']==i].min())/(df['GR'][df['Well']==i].max()-df['GR'][df['Well']==i].min() )
x['Well']=i
x=x[df['Well']==i]
a.append(x)
gr=pd.concat(a)
df['Vshale']=gr['GR']
</code></pre>
<p>输出:</p>
<pre><code>df
Out[53]:
Well GR Vshale
0 A 80 1.000000
1 A 64 0.360000
2 A 55 0.000000
3 B 56 0.000000
4 B 89 1.000000
5 B 73 0.515152
6 C 78 0.027027
7 C 100 0.324324
8 C 150 1.000000
9 C 76 0.000000
10 C 87 0.148649
</code></pre>
<p>说明:</p>
<ul>
<li>创建一个空列表<code>a</code></li>
<li>使用<code>for</code>循环实现<code>Well</code>的所有唯一值的逻辑</li>
<li>应用公式并将结果存储在<code>x</code>(请注意,每次迭代此循环时,公式都会应用于<code>Wells</code>的所有值,因此接下来的步骤将继续)</li>
<li>通过索引,将<code>x</code>减少为只有该特定<code>Well</code>值</李>
<li>将此<code>x</code>附加到初始化列表<code>a</code></li>
<li>现在只需在列表中连接数据帧,并将这些值分配给原始数据帧</li>
</ul>