Если у меня есть фрейм данных pandas, можно ли получить значения из строки и использовать его в качестве метки для нового столбца?
У меня есть что-то вроде этого:
| Team| DateTime| Score
| Red| 2021/03/19 | 5
| Red| 2021/03/20 | 10
| Blue| 2022/04/10 | 20
Я хотел бы записать эти данные в новый фрейм данных, который имеет:
Столбец команды
Колонка SumScore за год/месяц
Таким образом, у меня будет строка для каждой команды с несколькими новыми столбцами для месяца в году, которая содержит сумму очков за конкретный месяц. Это должно быть так:
Команда | 2021/03 | 2022/04 |
---|---|---|
Красный | 15 | 0 |
Синий | 0 | 20 |
Время в формате даты ГГГГ/ММ/ДД.
Я надеюсь, что я ясно
Ты можешь использовать
df = (df.assign(YM=df['DateTime'].str.rsplit('/', 1).str[0])
.pivot_table(index='Team', columns='YM', values='Score', aggfunc='sum', fill_value=0)
.reset_index())
print(df)
YM Team 2021/03 2022/04
0 Blue 0 20
1 Red 15 0
Мы можем использовать pd.crosstab
, что позволяет нам
Compute a simple cross tabulation of two (or more) factors
Ниже я изменил df['DateTime']
, чтобы содержать только year/month
.
df['DateTime'] = pd.to_datetime(df['DateTime']).dt.strftime('%Y/%m')
pd.crosstab(
df['Team'],
df['DateTime'],
values=df['Score'],
aggfunc='sum'
).fillna(0)
Если вам не нужны несколько уровней в индексе, просто используйте вызов метода reset_index
в кросс-таблице, а затем отбросьте DateTime
.
создайте пример того, что вы хотите, неясно, хотите ли вы мультииндекс или нет