Создайте новый набор данных со столбцами определенных строк со средним значением за день

#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