Вы хотите разделить слова в windows
, чтобы у вас был n x 3
фрейм данных.Затем используйте replace
и mean(axis=1)
:
df = pd.DataFrame({'window': ['(AAA, AAA, AAA)', '(AAA, AAA, AAC)'],
'C': [26, 3],
'E': [4, 1],
'H': [111, 1]})
p_dict = {'AAA':1, 'AAC':2}
(df['window'].str[1:-1]
.str.split(',\s*', expand=True)
.replace(p_dict).mean(axis=1)
)
:
0 1.000000
1 1.333333
dtype: float64
В случае, если ваш p_dict
является списком, нам нужно только немного подправить:
p_dict = {'AAA':[0.2, 12, 301.], 'AAC':[31, 0.91, 8.]}
p_df = pd.DataFrame(p_dict).T
new_df = (df['window'].str[1:-1]
.str.split(',\s*', expand=True)
.stack()
)
pd.DataFrame(p_df.loc[new_df].values,
index=new_df.index).mean(level=0)
дает вам:
0 1 2
0 0.200000 12.000000 301.000000
1 10.466667 8.303333 203.333333
Примечание это работает, только если списки в dict сейчас имеют одинаковый размер.