有没有办法使功能在熊猫中更通用?

时间:2019-03-27 13:50:48

标签: python pandas function generics

我正在为数据集编写一些函数,并且我想知道是否存在一种方法来编写这些函数,以使它们在多个数据集上工作,其中列可能具有不同的名称。

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 个答案:

答案 0 :(得分:1)

最简单的呼叫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"])