过滤要由其列索引替换的值

时间:2017-08-03 13:31:05

标签: python pandas

我可以访问HDF5数据库并从中导入数据。该数据有2个索引,日期和位置。假设在初始修改之后,DataFrame处于此结构中,沿着列的沿着日期索引和沿着行的深度。

+----+-------------+--------------+--------------+......+--------------+
| -- |  2014-01-01 |  2014-01-02  |  2014-01-03  | .... |  2014-04-10  |
+----+-------------+--------------+--------------+......+--------------+
| 1m |     10.9    |     15.6     |     10.3     | .... |     9.90     |
+----+-------------+--------------+--------------+......+--------------+
| 2m |     10.7    |     15.4     |     10.5     | .... |     10.1     |
+----+-------------+--------------+--------------+......+--------------+
| 3m |     10.5    |     15.2     |     10.7     | .... |     10.3     |
+----+-------------+--------------+--------------+......+--------------+
| 4m |     10.3    |     15.0     |     10.9     | .... |     10.5     |
+----+-------------+--------------+--------------+......+--------------+
| 5m |     10.1    |     14.8     |     11.1     | .... |     10.7     |
+----+-------------+--------------+--------------+......+--------------+

我接下来要做的是制作一个表格,其中包含每个深度的最小值的日期。使用上表中的可见数据,新表应该包含以下值:

+----+-------------+
| 1m |  2014-04-10 |
+----+-------------+
| 2m |  2014-04-10 |
+----+-------------+
| 3m |  2014-04-10 |
+----+-------------+
| 4m |  2014-01-01 |
+----+-------------+
| 5m |  2014-01-01 |
+----+-------------+

在此之后,我应该能够通过使用DataFrame.mode()函数找到具有最大低值的日期。这应该返回 2014-04-10

我目前解决这个问题的尝试没有给出预期的结果。我是大熊猫的业余爱好者,我的主要困境是用列索引替换值。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

使用idxmin

In [1092]: df.idxmin(axis=1)
Out[1092]:
1m    2014-04-10
2m    2014-04-10
3m    2014-04-10
4m    2014-01-01
5m    2014-01-01
dtype: object

In [1093]: df
Out[1093]:
    2014-01-01  2014-01-02  2014-01-03  2014-04-10
1m        10.9        15.6        10.3         9.9
2m        10.7        15.4        10.5        10.1
3m        10.5        15.2        10.7        10.3
4m        10.3        15.0        10.9        10.5
5m        10.1        14.8        11.1        10.7

而且,如果您的深度不是索引,则可以使用set_index

In [1107]: df
Out[1107]:
  depth  2014-01-01  2014-01-02  2014-01-03  2014-04-10
0    1m        10.9        15.6        10.3         9.9
1    2m        10.7        15.4        10.5        10.1
2    3m        10.5        15.2        10.7        10.3
3    4m        10.3        15.0        10.9        10.5
4    5m        10.1        14.8        11.1        10.7

In [1108]: df.set_index('depth').idxmin(axis=1)
Out[1108]:
depth
1m    2014-04-10
2m    2014-04-10
3m    2014-04-10
4m    2014-01-01
5m    2014-01-01
dtype: object