考慮這個簡單的例子動態訪問熊貓數據幀列
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' –
@ℕℴℴḆḽḘ再次編輯我的答案。這是可能的,但它是一個可怕的反模式。不要這樣做。 –