假设我有一个数据框
df
如下:
id value_type_and_model_name
0 1 actual_value
1 2 fitted_value_RUT_ARIMA
2 3 fitted_lower_value_RUT_ARIMA
3 4 fitted_upper_value_RUT_ARIMA
4 5 predicted_value_RUT_ARIMA
5 6 predicted_lower_value_RUT_ARIMA
6 7 predicted_upper_value_RUT_ARIMA
7 8 fitted_value_RUT_ES
8 9 fitted_lower_value_RUT_ES
9 10 fitted_upper_value_RUT_ES
10 11 predicted_value_RUT_ES
11 12 predicted_lower_value_RUT_ES
12 13 predicted_upper_value_RUT_ES
13 14 fitted_value_RUT_SARIMAX
14 15 fitted_lower_value_RUT_SARIMAX
15 16 fitted_upper_value_RUT_SARIMAX
16 17 predicted_value_RUT_SARIMAX
17 18 predicted_lower_value_RUT_SARIMAX
18 19 predicted_upper_value_RUT_SARIMAX
我想使用
右侧第二个下划线作为分隔符将此列拆分为两列(
'actual_value'
除外)。
预期结果如下:
id value_type model_name
0 1 actual_value NaN
1 2 fitted_value RUT_ARIMA
2 3 fitted_lower_value RUT_ARIMA
3 4 fitted_upper_value RUT_ARIMA
4 5 predicted_value RUT_ARIMA
5 6 predicted_lower_value RUT_ARIMA
6 7 predicted_upper_value RUT_ARIMA
7 8 fitted_value UT_ES
8 9 fitted_lower_value UT_ES
9 10 fitted_upper_value UT_ES
10 11 predicted_value UT_ES
11 12 predicted_lower_value UT_ES
12 13 predicted_upper_value UT_ES
13 14 fitted_value RUT_SARIMAX
14 15 fitted_lower_value RUT_SARIMAX
15 16 fitted_upper_value RUT_SARIMAX
16 17 predicted_value RUT_SARIMAX
17 18 predicted_lower_value RUT_SARIMAX
18 19 predicted_upper_value RUT_SARIMAX
如何实现这一目标?谢谢。
由于第二块中“仅”有一个下划线,最简单的方法是为该特定情况制作一个正则表达式:
out = (df['value_type_and_model_name']
.str.extract(r'(?P<value_type>.*)_(?P<model_name>[^_]*_[^_]*)$')
)
输出:
value_type model_name
0 NaN NaN
1 fitted_value RUT_ARIMA
2 fitted_lower_value RUT_ARIMA
3 fitted_upper_value RUT_ARIMA
4 predicted_value RUT_ARIMA
5 predicted_lower_value RUT_ARIMA
6 predicted_upper_value RUT_ARIMA
7 fitted_value RUT_ES
8 fitted_lower_value RUT_ES
9 fitted_upper_value RUT_ES
10 predicted_value RUT_ES
11 predicted_lower_value RUT_ES
12 predicted_upper_value RUT_ES
13 fitted_value RUT_SARIMAX
14 fitted_lower_value RUT_SARIMAX
15 fitted_upper_value RUT_SARIMAX
16 predicted_value RUT_SARIMAX
17 predicted_lower_value RUT_SARIMAX
18 predicted_upper_value RUT_SARIMAX
如果需要,您可以分配给原始数据框:
df[['value_type', 'model_name']] = df.pop('value_type_and_model_name').str.extract(r'(.*)_([^_]*_[^_]*)$')
输出:
id value_type model
0 1 NaN NaN
1 2 fitted_value RUT_ARIMA
2 3 fitted_lower_value RUT_ARIMA
3 4 fitted_upper_value RUT_ARIMA
4 5 predicted_value RUT_ARIMA
5 6 predicted_lower_value RUT_ARIMA
6 7 predicted_upper_value RUT_ARIMA
7 8 fitted_value RUT_ES
8 9 fitted_lower_value RUT_ES
9 10 fitted_upper_value RUT_ES
10 11 predicted_value RUT_ES
11 12 predicted_lower_value RUT_ES
12 13 predicted_upper_value RUT_ES
13 14 fitted_value RUT_SARIMAX
14 15 fitted_lower_value RUT_SARIMAX
15 16 fitted_upper_value RUT_SARIMAX
16 17 predicted_value RUT_SARIMAX
17 18 predicted_lower_value RUT_SARIMAX
18 19 predicted_upper_value RUT_SARIMAX