#python #pandas
Вопрос:
Я пытаюсь найти эффективный способ для большого набора данных справиться со следующим: данные содержат несколько строк в день с указанными кодами (строками) и оценками в виде столбцов. Я пытаюсь создать новый набор данных со столбцами для всех строк в этом списке; строка=[‘239’, ‘345’, ‘346’] и новый набор данных должен содержать среднее значение рейтинга за каждый день. Так что я получаю временной ряд средних указанных чисел.
Это был бы простой пример набора данных:
df1 = pd.DataFrame({ 'Date':['2021-01-01', '2021-01-01', '2021-01-01', '2021-01-02', '2021-01-02', '2021-01-02', '2021-01-02', '2021-01-03'], 'Code':['P:346 K,329 28', 'N2:345 P239', 'P:346 K2', 'E32 345', 'Q2_325', 'P;235 K345', '2W345', 'Pq-245 3460239'], 'Ratings':[9.0, 8.0, 5.0, 3.0, 2, 3, 6, 5]})
Я пытаюсь добиться чего-то похожего на эту таблицу, но до сих пор мне не удавалось сделать это эффективно.
strings = ['239', '345', '346'] df2 = pd.DataFrame({ 'Date':['2021-01-01', '2021-01-02', '2021-01-03'], '239':[8.5, 'NA', '5'], '345':[8, 4, 'NA'], '346':[7, 'NA', 5],})
Большое вам спасибо за вашу помощь:)
Ответ №1:
IIUC вы можете extract
использовать строки в code
столбце, а затем pivot
:
print (df1.assign(Code=df1["Code"].str.extractall(f"({'|'.join(strings)})").groupby(level=0).agg(tuple)) .explode("Code") .pivot_table(index="Date", columns="Code", values="Ratings", aggfunc="mean")) Code 239 345 346 Date 2021-01-01 8.5 8.0 7.0 2021-01-02 NaN 4.0 NaN 2021-01-03 5.0 NaN 5.0