Есть ли способ сделать функцию более общей в пандах? - PullRequest
1 голос
/ 27 марта 2019

Я пишу несколько функций для наборов данных, и мне интересно, есть ли способ написать эти функции, чтобы они работали с несколькими наборами данных, где столбцы могут иметь разные имена.

def calc(df):
    a = df.groupby(['Region', 'Year'], as_index=False)["Sales"].sum()
    print(a.to_string(index=False))

Эта функция работает без проблем, так как я указываю имена столбцов. Есть ли что-нибудь подобное:

def calc(df, x1, x2, x3):
    a = df.groupby([x1, x2], as_index=False)[x3].sum()
    print(a.to_string(index=False))

И выведите значения следующим образом:

if __name__ == "__main__":
    report2(df, df['Region'], df['Year'], df["Sales"])

Когда я пытаюсь это сделать, я всегда получаю сообщение об ошибке:

Traceback (most recent call last):
  File "sales_record.py", line 60, in <module>
    calc(df, df['Region'], df['Year'], df["Sales"])
  File "sales_record.py", line 54, in calc
    answer = df.groupby([x1, x2], as_index=False)[x3].sum()
  File "C:\Users\User\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\base.py", line 265, in __getitem__
    .format(missing=str(bad_keys)[1:-1]))
KeyError: 'Columns not found: 7200, 22500, 82500, 1800, 45000, 9000, 99000, 18000, 22000, 8400, 110000, 16500, 54000, 112500, 3000'

Любая помощь будет высоко ценится.

1 Ответ

1 голос
/ 27 марта 2019

Самый простой вызов columns names:

calc(df, 'Region', 'Year', "Sales")

Ваше решение должно быть немного изменено для работы - вместо него также передается Series DaatFrame - проверьте this - это также называется синтаксическим сахаром:

def calc1(x1, x2, x3):
    a = x3.groupby([x1, x2], as_index=False).sum()
    print(a.to_string(index=False))

calc1(df['Region'], df['Year'], df["Sales"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...