У меня есть эта функция, которую я создал, которая делает следующее:
def groupby2(df, col1, col2):
return(df.groupby([col1])[col2].count().reset_index().sort_values(by=[col2], ascending=False))
Это здорово, но я хочу работать с несколькими столбцами. Например, если я запускаю это:
groupby2(df, 'Age', 'Weight')
^ Это работает нормально. Но это,
groupby2(df, ['Age','Gender'], 'Weight')
возвращает сообщение об ошибке:
ValueError: недостаточно значений для распаковки (ожидалось 2, получено 0)
Застрял и не уверен, как исправить код, чтобы принять несколько столбцов
Также неясно, чего вы ожидаете, когда кто-то передает список из трех или более столбцов.
Вы можете сделать быструю isinstance
проверку и ввести ввод следующим образом:
import pandas as pd
def groupby2(df, col1, col2):
if isinstance(col1, (str, pd.Series, tuple)):
col1 = [col1]
return (
df.groupby(col1)[col2].count()
.reset_index()
.sort_values(by=[col2], ascending=False)
)
По сути, я проверяю, передается ли один столбец в col1
, и принуждаю его к списку столбцов. В противном случае я предполагаю, что список передан, и я должен оставить ввод нетронутым.
def groupby2(df, list_of_columns)
???