擅长:python、mysql、java
<p>您可以尝试以下方法:</p>
<pre><code>df
value name1 %1 name2 %2 name3 %3
0 100 person1 0.3 person2 0.5 person3 0.2
1 100 person4 1.0 None NaN None NaN
2 100 person1 0.6 person5 0.4 None NaN
</code></pre>
<pre class="lang-py prettyprint-override"><code>def get_value(sr):
dict_={}
for i in range(1,4):
if sr['name'+str(i)] is None:
continue
dict_[sr['name'+str(i)]] = sr['value']*sr['%'+str(i)]
return pd.Series(dict_)
df_new = df.apply(lambda x : get_value(x), axis=1).stack().reset_index()
df_new
level_0 level_1 0
0 0 person1 30.0
1 0 person2 50.0
2 0 person3 20.0
3 1 person4 100.0
4 2 person1 60.0
5 2 person5 40.0
</code></pre>