У меня есть фрейм данных с неудачным выбором дизайна, который выглядит следующим образом: df = pd.DataFrame ({'Day': ['2021-03-01', '2021-03-01', '2021-03-02') , '2021-03-02', '2021-03-03'], 'Имя': ['Сэм', 'Сэм', ...
2 ответа
Расплавьте столбцы, сравните столбец Day
со столбцом variable
, который содержит индексы дней, группировки, агрегирования (суммы), разделения и сброса:
(df
.melt(['Day', 'Name', 'Fruit'])
.loc[lambda df: df.Day.eq(df.variable)]
.astype({"value": int})
.groupby(['Day', 'Name', 'Fruit'])['value']
.sum()
.unstack(fill_value = 0)
.add_prefix("nr")
.reset_index()
.rename_axis(columns = None)
)
Fruit Day Name nrApple nrBanana
0 2021-03-01 Sam 3 0
1 2021-03-02 Jack 0 4
2 2021-03-02 Steve 2 0
3 2021-03-03 Steve 0 4
def fn(x):
return (
x.set_index("Fruit")
.loc[:, x.Day.iat[0]]
.astype(int)
.groupby(level=0)
.sum()
.to_dict()
)
df = (
df.groupby(["Day", "Name"])
.apply(fn)
.apply(pd.Series)
.add_prefix("nr")
.reset_index()
.fillna(0)
)
print(df)
Печать:
Day Name nrApple nrBanana
0 2021-03-01 Sam 3.0 0.0
1 2021-03-02 Jack 0.0 4.0
2 2021-03-02 Steve 2.0 0.0
3 2021-03-03 Steve 0.0 4.0
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.