我会忘记’max_val_idx’列.我不认为它节省了时间,实际上更多的是语法上的痛苦.样本数据:
df = pd.DataFrame({ 'x': range(3) }).applymap( lambda x: np.random.randn(3) )
x
0 [-1.17106202376, -1.61211460669, 0.0198122724315]
1 [0.806819945736, 1.49139051675, -0.21434675401]
2 [-0.427272615966, 0.0939459129359, 0.496474566...
你可以像这样提取最大值:
df.applymap( lambda x: x.max() )
x
0 0.019812
1 1.491391
2 0.496475
但一般来说,如果每个细胞有一个数字,生活会更容易.如果每个单元格都有一个长度为3的数组,则可以重新排列如下:
for i, v in enumerate(list('abc')): df[v] = df.x.map( lambda x: x[i] )
df = df[list('abc')]
a b c
0 -1.171062 -1.612115 0.019812
1 0.806820 1.491391 -0.214347
2 -0.427273 0.093946 0.496475
然后做一个标准的熊猫操作:
df.apply( max, axis=1 )
x
0 0.019812
1 1.491391
2 0.496475
不可否认,这并不比上面容易得多,但总体而言,这种形式的数据更容易使用.