考虑这个简单的例子动态访问熊猫数据帧列
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
字符串可以转换为可能以这种方式工作的东西吗? 谢谢!
感谢coldspeed。我编辑了我的问题。我的观点是,给定一个字符串作为输入,是否有可能将它转换为可以使用该语法的东西?说'notastring = magicfunction(mycol)',然后'df.notastring' –
@ℕℴℴḆḽḘ再次编辑我的答案。这是可能的,但它是一个可怕的反模式。不要这样做。 –