У меня большой DataFrame, который выглядит следующим образом:
+----------------------------------------------------------+
| Date Category Location ImpactRate |
+----------------------------------------------------------+
| 2018-04-22 Outage MT 0.05194 |
| 2018-04-22 Outage ND 0.02552 |
| 2018-04-22 Outage SD 0.09962 |
| 2018-04-24 Transport TX 0.03111 |
+----------------------------------------------------------+
Я пытаюсь создать следующий вывод:
+-----------------------------------------------------------------------------------+
| Date Category ImpactRate Break Down |
+-----------------------------------------------------------------------------------+
| 2018-04-22 Outage 0.17708 MT (29.3%) SD (14.4%) ND (56.3%) |
| 2018-04-24 Transport 0.03111 TX (100.0%) |
+-----------------------------------------------------------------------------------+
Первая попытка -GroupBy
grouped_df = df.groupby('Date')['ImpactRate'].apply(list).apply(pd.Series).rename(columns=df['Location'])'
Это создает DataFrame, который будет содержать NaN, где нет каждого местоположения, и создает дополнительные столбцы, требующие форматирования.
Вторая попытка - цикл с использованиемitertuples ():
r = []
for item in df.itertuples():
temp_x = df.loc[((df['Category'] == item[2]) & (df['Date'] == item[1]))
for i in range(temp_x.shape[0]):
r.append(temp_x['ImpactRate'].iloc[i])
Это создает один гигантский список ImpactRate - который возвращает меня к исходной точке.
Я не знаю достаточно, чтобы понять, как решить эту проблему.Я предполагаю, что я должен составить список в списке для каждой итерации, но я продолжаю идти кругами.Как я могу достичь этого результата самым питоническим способом?(Пожалуйста, объясните, чтобы я мог учиться!)