python - 过滤要替换为其列索引的值

标签 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

我目前解决此问题的尝试尚未给出预期的结果。我是 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/

相关文章:

python - 不同参数的多个散点图 - Python

Python - Tkinter 预选按钮

python - 如何将命名空间添加到 lxml 中的属性

python - 在视频中每秒绘制一个圆圈

python - 在 PyCharm 终端中运行 bash 脚本 (.sh) 时使用 PyCharm 的内联调试器

python - 如何转换 pandas 数据框,使索引是唯一的一组值,数据是每个值的计数?

python - 编辑两个 Pandas 列之间的距离

python - 在 pytube 中显示进度

如果其他列为假, Pandas : dataframe cumsum , 将重置

Python - 如何流式传输大 (11 gb) JSON 文件以进行分解