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