您好我有以下数据框,我正在尝试计算每个城市(行)的绝对更改,并打印具有最大值的城市的城市名称。我能够得到绝对的变化,但我没有获得城市名称,我只能得到索引值。有没有办法可以获得城市名称而不是索引值。在下面的例子中,我得到索引值3而不是“达拉斯”。
City col1 col2 col3 col4
0 Chicago 10 45 25 60
1 Atlanta 15 75 35 105
2 New York 80 90 60 325
3 Dallas 200 5 420 55
输出:
diff_row = df.max(axis=1) - df.min(axis=1)
print(diff_row.idxmax())
获得col1-col4的最大绝对值
3
当前输出:
Dallas
期望的输出:
let factorial = function (n: number): number {
if (isFinite(n) && n > 0 && n == Math.round(n)) {
if (!(n in factorial))
factorial[n] = n * factorial(n - 1);
return factorial[n];
}
else
return NaN;
} as Factorial;
factorial[1] = 1;
答案 0 :(得分:2)
将索引标签传递给loc
和感兴趣的col:
In[198]:
df.loc[diff_row.idxmax(), 'City']
Out[198]: 'Dallas'
答案 1 :(得分:1)
退一步并使用numpy.ptp
(峰值到峰值)减去最小值min。
df.set_index('City').apply(np.ptp, 1).idxmax()
'Dallas'
我们可以通过
将更多内容推送到numpy
df.City.values[np.ptp(df.set_index('City').values, 1).argmax()]
'Dallas'
计时
%timeit df.City.values[np.ptp(df.set_index('City').values, 1).argmax()]
%timeit df.set_index('City').apply(np.ptp, 1).idxmax()
1000 loops, best of 3: 399 µs per loop
1000 loops, best of 3: 1.03 ms per loop
%%timeit
diff_row = df.max(axis=1) - df.min(axis=1)
df.loc[diff_row.idxmax(), 'City']
1000 loops, best of 3: 1.24 ms per loop