<p>像这样的</p>
<pre><code># setup
df = pd.DataFrame.from_records([
{'string': 'on_calculated_3_things_swell'},
{'string': 'on_calculated_3_things_neap'},
{'string': 'on_calculated_3_things_kts'},
{'string': 'on_calculated_3_things_tov'},
{'string': 'on_calculated_churn_rate_fg2_perc'},
{'string': 'off_calculated_3_things_swell'},
{'string': 'off_calculated_3_things_neap'},
{'string': 'off_calculated_3_things_kts'},
{'string': 'off_calculated_3_things_tov'},
{'string': 'off_calculated_churn_rate_fg2_perc'}])
df['data'] = np.random.rand(len(df))
df
string data
0 on_calculated_3_things_swell 0.047960
1 on_calculated_3_things_neap 0.949035
2 on_calculated_3_things_kts 0.441468
3 on_calculated_3_things_tov 0.144224
4 on_calculated_churn_rate_fg2_perc 0.176003
5 off_calculated_3_things_swell 0.092168
6 off_calculated_3_things_neap 0.300117
7 off_calculated_3_things_kts 0.698156
8 off_calculated_3_things_tov 0.845363
9 off_calculated_churn_rate_fg2_perc 0.384454
</code></pre>
<hr/>
<pre><code># split and subtract
df[['on', 'suffix']] = df['string'].str.split('_', 1, expand=True)
g = df.groupby('on')
diff_series = g.get_group('on').set_index('suffix')['data'].sub(
g.get_group('off').set_index('suffix')['data']
)
diff_series
suffix
calculated_3_things_swell -0.044208
calculated_3_things_neap 0.648918
calculated_3_things_kts -0.256689
calculated_3_things_tov -0.701139
calculated_churn_rate_fg2_perc -0.208452
Name: data, dtype: float64
</code></pre>
<hr/>
<pre><code># combine with original df
diff_df = pd.DataFrame({'data': diff_series, 'string': 'dif_' + diff_series.index})
df = pd.concat([df, diff_df], axis=0, join='inner').reset_index(drop=True)
df
string data
0 on_calculated_3_things_swell 0.047960
1 on_calculated_3_things_neap 0.949035
2 on_calculated_3_things_kts 0.441468
3 on_calculated_3_things_tov 0.144224
4 on_calculated_churn_rate_fg2_perc 0.176003
5 off_calculated_3_things_swell 0.092168
6 off_calculated_3_things_neap 0.300117
7 off_calculated_3_things_kts 0.698156
8 off_calculated_3_things_tov 0.845363
9 off_calculated_churn_rate_fg2_perc 0.384454
10 dif_calculated_3_things_swell -0.044208
11 dif_calculated_3_things_neap 0.648918
12 dif_calculated_3_things_kts -0.256689
13 dif_calculated_3_things_tov -0.701139
14 dif_calculated_churn_rate_fg2_perc -0.208452
</code></pre>