【发布时间】:2021-03-27 10:04:02
【问题描述】:
我有一个如下所示的数据框:
| FakeDist | -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 37 | 14 | 17 | 29 | 31 | 34 | 32 | 31 | 21 | 17 | 18 |
| 2 | 12 | 13 | 12 | 16 | 30 | 33 | 37 | 32 | 32 | 15 | 42 |
| 3 | 40 | 16 | 29 | 31 | 36 | 32 | 30 | 19 | 16 | 15 | 12 |
| 4 | 12 | 14 | 12 | 28 | 28 | 30 | 29 | 27 | 16 | 18 | 33 |
| 5 | 12 | 13 | 16 | 17 | 28 | 32 | 33 | 30 | 29 | 17 | 35 |
我想添加一列作为每行最大值的 Column_Name。
我这样做了:
df['MaxVal_Dist'] = df.idxmax(axis=1)
这给了我这个df:
| FakeDist | -5 | -4 | ... | MaxVal_Dist |
|---|---|---|---|---|
| 1 | 37 | 14 | ... | -5 |
| 2 | 12 | 13 | ... | 5 |
| 3 | 40 | 16 | ... | -5 |
| 4 | 12 | 14 | ... | 5 |
| 5 | 12 | 13 | ... | 5 |
但我真正的目的是添加一个 if 条件。我想要'FakeDist'在-2和2之间的列的最大值。得到以下结果:
| FakeDist | -5 | -4 | ... | MaxVal_Dist |
|---|---|---|---|---|
| 1 | 37 | 14 | ... | 0 |
| 2 | 12 | 13 | ... | 1 |
| 3 | 40 | 16 | ... | -1 |
| 4 | 12 | 14 | ... | 0 |
| 5 | 12 | 13 | ... | 1 |
我确实尝试查看如何添加df.apply,但找不到如何使其工作。
我有一个“解决方法”的想法,即将列的子集(从-2到2)存储在一个新的数据框中,创建我的新列以获得最大值,然后将该结果列添加到我的初始数据框但是在我看来,这不是一个优雅的解决方案,我相信还有很多更好的事情要做。
我很高兴向您学习优雅的方法!
【问题讨论】: