#python #pandas-groupby
Вопрос:
У меня есть фрейм данных, который я хочу сгруппировать и агрегировать на основе определенных условий и приведенного ниже упрощенного примера.
|Key|Amount|Bitcoin
|ABC|100|0
|ABC|200|0
|ABC|100|1
Желаемый Результат:
|Key|Total Amount|Bitcoin Amount
|ABC|400|100
Теперь я мог бы легко сгруппировать ключ и суммировать сумму, а также отдельно создать фрейм данных только с биткойн-транзакциями, сгруппировать его и объединить два фрейма данных, но для решения этой проблемы должна быть простая строка кода?
Заранее спасибо.
Комментарии:
1. как вы получаете 100 долларов за биткойн?
2.100*1 0*100 0*200?
3. ну ладно, спасибо 😉
4. Я бы хотел, чтобы у меня было 100 биткоинов. К сожалению, 10 лет назад банки Великобритании сделали все возможное, чтобы помешать гражданам Великобритании покупать их.
Ответ №1:
Я бы подошел к этому следующим образом
import pandas as pd
df = pd.DataFrame({"Key":["ABC","ABC","ABC"],"Amount":[100,200,100],"Bitcoin":[0,0,1]})
df["BitcoinAmount"] = df["Amount"]*df["Bitcoin"]
print(df.groupby("Key").agg({"Amount":"sum","BitcoinAmount":"sum"}))
выход
Amount BitcoinAmount
Key
ABC 400 100
Не совсем однострочный, но его легко понять. Обратите внимание, что это сработало бы df["Bitcoin"]
не только 0
для s и 1
s, но и False
для s и True
s.
Комментарии:
1. отлично, спасибо
Ответ №2:
Вы можете добавить еще один столбец суммы * биткойн, а затем просто группировать ключ и сумму:
df['Bitcoin Amount'] = df['Amount'] * df['Bitcoin']
df2 = df.groupby('Key', as_index=False).sum()[['Key', 'Amount', 'Bitcoin Amount']]
Выход:
Key Amount Bitcoin Amount
0 ABC 400 100
Вы можете добавить .rename(columns = {'Amount':'Total Amount'})
в конце строки groupby, если имена столбцов должны соответствовать выводимым данным.