Python函数传递参数

时间:2018-05-29 16:49:48

标签: python python-3.x pandas

我正在尝试编写一个简单的函数,它将从pandas df中的特定列中计算出唯一值。我想使用列名作为函数参数。但是,该参数不会被识别为函数内的字符串。

以下是我要转换为 c_type 列名的函数。

c_type_count = data.groupby('c_type').c_type.count()

这是功能。我使用参数列来传递列名:

def uniques(column):
    count = data.groupby(column).column.count()
    print(count)

groupby(列)部分用作缩进,但第二个引用 .column 保留为.column,我收到错误,因为该名称中没有列df。

我理解那里发生了什么,但由于我是Python的新手,我不一定知道切换语法的人。

2 个答案:

答案 0 :(得分:2)

我认为您只是在寻找value_counts()

data['c_type'].value_counts()

准确地说明您所描述的内容。

示例

>>> data
  b_type c_type
0      d      b
1      d      a
2      d      a
3      c      a
4      c      a
5      d      b
6      c      a
7      d      b
8      c      b
9      c      a

>>> data['c_type'].value_counts()
a    6
b    4

如何修复自定义功能

如果要继续使用自定义函数,则只需使用标准索引而不是属性索引,换句话说,使用方括号而不是点符号来访问列。有关详细信息,请参阅documentation on indexing

def uniques(column):
    count = data.groupby(column)[column].count()
    # Alternatively:
    # count = data.groupby(column).size()
    print(count)

这可以随意使用:

>>> uniques('c_type')
c_type
a    6
b    4

答案 1 :(得分:1)

这是设计的,在您的示例中,您调用GroupBy对象的column方法,python从不在当前范围中查找列值。 您正在寻找的是内置函数getattr(),它将通过其字符串名称获取对象属性/方法。

def uniques(column):
    count = getattr(data.groupby(column), column).count()
    print(count)