執行例題中 agg function 時發生 nested renamer is not supported. 以及在記數或hash編碼後遇到的 Converge warning
老師們好: 我在執行範例及例題時, > count_df=df.groupby("Cabin")['Name'].agg({"Cabin_count":"size"}).reset_index() 這步會遇到一個錯誤 nested renamer is not supported  我查看網路上的一些資料有人建議可以改成 > count_df=df.groupby("Cabin")\ ['Name'].agg(Cabin_count=pd.NamedAgg(column="Name",aggfunc="size")).reset_index() 在我的 anaconda 上可以執行後者,但仍想請問這兩者的差異,以及如何解決前述的問題。(在 pandas 官網中都沒有看到這兩種寫法的介紹) 另外想問的問題是我在執行編碼後,會出現 C:\ProgramData\Anaconda3\lib\site-packages\sklearn\linear_model\_logistic.py:940: ConvergenceWarning: lbfgs failed to converge (status=1): STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.  想請問這個是否會影響到計算後的分數,對於這樣的 warning 執行上是否需要作出甚麼應對?
回答列表
-
2020/07/09 下午 00:42Jeffrey贊同數:1不贊同數:2留言數:0
1. nested renamer is not supported原因:
"在新的pandas版本中,建議使用Aggregation來替代已棄用的" dict-of-dicts"方法,以命名特定於列的聚合的輸出"
2.
DataFrameGroupBy.
agg
(arg, *args, **kwargs)[source]所以第二種方式: 原本用 dict 的對應改成 Cabin v.s Name 跟 Cabin_count v.s. Size 相對關係手動建立
3. 可以把groupby 分成兩段執行:
舉例:
temp['total'] = pd.DataFrame(project_data.groupby(col1)[col2].agg({'total':'count'})).reset_index()['total']
temp['Avg'] = pd.DataFrame(project_data.groupby(col1)[col2].agg({'Avg':'mean'})).reset_index()['Avg']
temp['total'] = pd.DataFrame(project_data.groupby(col1)[col2].agg(total='count')).reset_index()['total']temp['Avg'] = pd.DataFrame(project_data.groupby(col1)[col2].agg(Avg='mean')).reset_index()['Avg'] -
2020/07/09 下午 03:32張維元 (WeiYuan)贊同數:1不贊同數:0留言數:0
你要把原本:
```
.agg({'total':'count'})
```
改成
```
.agg(total='count')
```
主要是版本上的差異...