0
鑑於問題groupby()
和nlargest()
如上所述here和here。我正在努力解決這些問題。切片原始DF()。nlargest(x)的操作
注意:爲簡單起見,我使用nlargest(1)
,但是,它可以是任意數量的選擇。
{'city1': {0: 'Chicago',
1: 'Chicago',
2: 'Chicago',
3: 'Chicago',
4: 'Miami',
5: 'Houston',
6: 'Austin'},
'city2': {0: 'Toronto',
1: 'Detroit',
2: 'St.Louis',
3: 'Miami',
4: 'Dallas',
5: 'Dallas',
6: 'Dallas'},
'p234_r_c': {0: 5.0, 1: 4.0, 2: 2.0, 3: 0.5, 4: 1.0, 5: 4.0, 6: 3.0},
'plant1_type': {0: 'COMBCYCL',
1: 'COMBCYCL',
2: 'NUKE',
3: 'COAL',
4: 'NUKE',
5: 'COMBCYCL',
6: 'COAL'},
'plant2_type': {0: 'COAL',
1: 'COAL',
2: 'COMBCYCL',
3: 'COMBCYCL',
4: 'COAL',
5: 'NUKE',
6: 'NUKE',}}
A)GROUPBY city1
並返回從原始選擇的行DF
cols2 = ['city1','plant1_type','plant2_type']
df.loc[df2.groupby(cols2)['p234_r_c'].nlargest(1).reset_index().level_3]
city1 city2 p234_r_c plant1_type plant2_type
6 Austin Dallas 3.0 COAL NUKE
3 Chicago Miami 0.5 COAL COMBCYCL
0 Chicago Toronto 5.0 COMBCYCL COAL
2 Chicago St.Louis 2.0 NUKE COMBCYCL
5 Houston Dallas 4.0 COMBCYCL NUKE
4 Miami Dallas 1.0 NUKE COAL
上面看起來不錯
B)GROUPBY city2
並返回從原始DF
選定的行由於#A中使用的相同代碼在嘗試groupby city2
時會生成僞造結果,建議採取解決方法以下內容:
cols = ['city2','plant1_type','plant2_type']
df.set_index(cols).groupby(level=cols)['p234_r_c'].nlargest(1)
city2 plant1_type plant2_type
Toronto COMBCYCL COAL 5.0
Detroit COMBCYCL COAL 4.0
St.Louis NUKE COMBCYCL 2.0
Miami COAL COMBCYCL 0.5
Dallas NUKE COAL 1.0
COMBCYCL NUKE 4.0
COAL NUKE 3.0
現在怎麼辦我用這個結果返回從原來選擇的行DF正如我在#A做?
注:有原始的DF有一個附加行,對於city2
具有基團由groupby.nlargest()
結果,其中至少一個組具有尺寸小於1,則在#A
的代碼可以用於#B
更大。
說,如果我用'方法#1'和做僅使用'COLS = [ 'city1']''一個和groupby'希望'最大2(或N)p234_r_c'。我用'N = 2'嘗試了以下內容,結果與'N = 1'相同。 'df.loc [df.groupby(cols2)[「p234_r_c」]。idxmax(2)]' – codingknob
對於'N = 2',我們應該有2行芝加哥。即下面一行丟失:'芝加哥\t底特律\t 4.0 \t COMBCYCL \t COAL' – codingknob
@codingknob:'idxmax'沒有'n'參數,所以如果有文檔在某處暗示它,請提交一個錯誤,因爲我們需要修理它。 :-( – DSM