我正在尝试编写一个简单的函数,它将从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的新手,我不一定知道切换语法的人。
答案 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)