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