Pandas 以列作为参数调用函数

Pandas 以列作为参数调用函数,pandas,function,dataframe,arguments,Pandas,Function,Dataframe,Arguments,我编写了一个函数,它接受一个pandas数据帧和它的两列。在函数内部,我想用第二列的元素对第一列的元素进行分组。该函数的目标是使用matplotlib生成条形图,以绘制分组计数。我不知道如何引用列参数,以便函数内的group by调用能够识别它们 import pandas as pd # generate dataframe df = pd.DataFrame() df['col_A'] = [1, 4, 3, 2, 2, 1, 1, 4, 3, 2] df['col_B'] = ['a',

我编写了一个函数,它接受一个pandas数据帧和它的两列。在函数内部,我想用第二列的元素对第一列的元素进行分组。该函数的目标是使用matplotlib生成条形图,以绘制分组计数。我不知道如何引用列参数,以便函数内的group by调用能够识别它们

import pandas as pd

# generate dataframe
df = pd.DataFrame()
df['col_A'] = [1, 4, 3, 2, 2, 1, 1, 4, 3, 2]
df['col_B'] = ['a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'c', 'c']

# plot counts
import matplotlib.pyplot as plt

counts = df.groupby('col_B').col_A.count()
counts = counts.sort_values(ascending=False)

fig = plt.figure(figsize=(10,8))
counts.plot.barh(ylim=0).invert_yaxis()

# plot count with function
def count_barplot(data, x, y):

    counts = data.groupby(y).x.count()
    counts = counts.sort_values(ascending=False)

    fig = plt.figure(figsize=(10,8))
    counts.plot.barh(ylim=0).invert_yaxis()

# function call
count_barplot(df, df['col_A'], df['col_B'])
我试着使用df['col']和'col',但都不起作用。当我使用df['col']时,会出现以下错误:

AttributeError: 'DataFrameGroupBy' object has no attribute 'x'
AttributeError: 'DataFrameGroupBy' object has no attribute 'x'
当我使用“col”时,会出现以下错误:

AttributeError: 'DataFrameGroupBy' object has no attribute 'x'
AttributeError: 'DataFrameGroupBy' object has no attribute 'x'
下面是一个示例实现,首先不使用函数,生成预期结果,然后使用函数

import pandas as pd

# generate dataframe
df = pd.DataFrame()
df['col_A'] = [1, 4, 3, 2, 2, 1, 1, 4, 3, 2]
df['col_B'] = ['a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'c', 'c']

# plot counts
import matplotlib.pyplot as plt

counts = df.groupby('col_B').col_A.count()
counts = counts.sort_values(ascending=False)

fig = plt.figure(figsize=(10,8))
counts.plot.barh(ylim=0).invert_yaxis()

# plot count with function
def count_barplot(data, x, y):

    counts = data.groupby(y).x.count()
    counts = counts.sort_values(ascending=False)

    fig = plt.figure(figsize=(10,8))
    counts.plot.barh(ylim=0).invert_yaxis()

# function call
count_barplot(df, df['col_A'], df['col_B'])

如何在函数内部和函数调用中指定数据框列参数,以便group by函数能够识别它们?

这样对我来说很有用:

def计数\u条形图数据,x,y: 计数=数据。groupbyy[x]。计数 计数=计数。排序\u值SCENDING=False fig=plt.figurefigsize=10,8 counts.plot.barhylim=0.invert_yaxis 函数调用 计数条形图“A列”、“B列”
这对我来说很有用:

def计数\u条形图数据,x,y: 计数=数据。groupbyy[x]。计数 计数=计数。排序\u值SCENDING=False fig=plt.figurefigsize=10,8 counts.plot.barhylim=0.invert_yaxis 函数调用 计数条形图“A列”、“B列”
问题在于,函数调用提供了一个dataframe和两个系列作为其参数,而要传递的是dataframe和列名。注意,您还希望使用[]语法来引用groupby中的列,并且可以使用内置的value\u counts方法简化count方法

因此,使用您的语法:

带函数的绘图计数 def计数\u条形图数据,x,y: 计数=数据。groupbyy[x]。计数 计数=计数。排序\u值SCENDING=False fig=plt.figurefigsize=10,8 counts.plot.barhylim=0.invert_yaxis 计数条形图“A列”、“B列” 或者更简单地说:

带函数的绘图计数 def计数\u条形图数据,y: 计数=df[y]。值\u计数 fig=plt.figurefigsize=10,8 counts.plot.barhylim=0.invert_yaxis 函数调用 计数条形图“col_B” 甚至

def count_barplot(data, x, y):
    fig = plt.figure(figsize=(10,8))
    df[y].value_counts(ascending=True).plot.barh(ylim=0)

问题在于,函数调用提供了一个dataframe和两个系列作为其参数,而要传递的是dataframe和列名。注意,您还希望使用[]语法来引用groupby中的列,并且可以使用内置的value\u counts方法简化count方法

因此,使用您的语法:

带函数的绘图计数 def计数\u条形图数据,x,y: 计数=数据。groupbyy[x]。计数 计数=计数。排序\u值SCENDING=False fig=plt.figurefigsize=10,8 counts.plot.barhylim=0.invert_yaxis 计数条形图“A列”、“B列” 或者更简单地说:

带函数的绘图计数 def计数\u条形图数据,y: 计数=df[y]。值\u计数 fig=plt.figurefigsize=10,8 counts.plot.barhylim=0.invert_yaxis 函数调用 计数条形图“col_B” 甚至

def count_barplot(data, x, y):
    fig = plt.figure(figsize=(10,8))
    df[y].value_counts(ascending=True).plot.barh(ylim=0)