我可以访问 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。
我目前解决此问题的尝试尚未给出预期的结果。我是 Pandas 的业余爱好者,我的主要困境是用它们的列索引替换值。任何帮助将不胜感激。
最佳答案
使用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
关于python - 过滤要替换为其列索引的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45485735/