【发布时间】:2018-02-05 20:59:29
【问题描述】:
考虑这个简单的例子
import pandas as pd
df = pd.DataFrame({'one' : [1,2,3],
'two' : [1,0,0]})
df
Out[9]:
one two
0 1 1
1 2 0
2 3 0
我想编写一个函数,将数据框 df 和列 mycol 作为输入。
现在可以了:
df.groupby('one').two.sum()
Out[10]:
one
1 1
2 0
3 0
Name: two, dtype: int64
这也有效:
def okidoki(df,mycol):
return df.groupby('one')[mycol].sum()
okidoki(df, 'two')
Out[11]:
one
1 1
2 0
3 0
Name: two, dtype: int64
但这失败
def megabug(df,mycol):
return df.groupby('one').mycol.sum()
megabug(df, 'two')
AttributeError: 'DataFrameGroupBy' object has no attribute 'mycol'
这里有什么问题?
我担心okidoki 使用了一些链接,这可能会产生一些微妙的错误 (https://pandas.pydata.org/pandas-docs/stable/indexing.html#why-does-assignment-fail-when-using-chained-indexing)。
我怎样才能保持groupby('one').mycol 的语法?可以将mycol 字符串转换为可能以这种方式工作的东西吗?
谢谢!
【问题讨论】:
标签: python pandas dataframe dynamic accessor