【问题标题】:Drop columns for highest values in final row in pandas在熊猫的最后一行中删除最高值的列
【发布时间】:2020-08-06 06:19:59
【问题描述】:

我有多个一列 CSV 文件,我使用 pandas 连接并找到平均值:

#!/usr/bin/env python3

import os
import glob
import pandas as pd
from sys import argv, exit

os.chdir(f'{argv[1]}')
filenames = [i for i in glob.glob('*.csv')]
comb = pd.concat([pd.read_csv(f, header=None) for f in filenames], axis=1)
comb.columns = [f'Run {i+1}' for i in range(len(comb.columns))]
comb['Mean'] = comb.mean(numeric_only=True, axis=1)
comb.insert(loc=0, column='Epoch', value=[i+1 for i in range(len(comb))])
comb.to_csv(f'{argv[2]}', index=False)

argv[1] 是要连接的目录,argv[2] 是保存连接文件的位置。一个示例输入可能是:

0.6932
0.6605
0.634
0.5904
0.5339

还有一个示例输出:

Epoch   Run 1   Run 2   Run 3   Run 4   Run 5   Mean
1   0.6932  0.6711  0.6687  0.6814  0.6903  0.684856667
2   0.6605  0.6326  0.6423  0.6323  0.6247  0.639423333
3   0.634   0.6003  0.6063  0.5928  0.5786  0.603956667
4   0.5904  0.5604  0.5576  0.5448  0.5276  0.559693333
5   0.5339  0.519   0.5068  0.496   0.4813  0.513653333

这是连接五个一列五行的 CSV 文件。

如何从该表中删除最后一行编号最大的列?假设我想删除两列,在本例中为 Run 1Run 2。期望的输出可能是:

Epoch   Run 3   Run 4   Run 5   Mean
1   0.6687  0.6814  0.6903  0.680133333
2   0.6423  0.6323  0.6247  0.6331
3   0.6063  0.5928  0.5786  0.592566667
4   0.5576  0.5448  0.5276  0.543333333
5   0.5068  0.496   0.4813  0.4947

pandas 是否有内置函数可以根据某行的值删除列?我对给定列的最后一行感兴趣,并删除那里具有最高值的列。

【问题讨论】:

    标签: python python-3.x pandas csv concatenation


    【解决方案1】:

    这可能有点过头了:

    to_drop = (df.filter(like='Run')  # choose only the `Run` columns
                 .iloc[-1]            # and the last row
                 .nlargest(2)         # two largest cells
                 .index               # then the index, i.e. column names
              )
    
    df = df.drop(to_drop, axis=1)
    

    【讨论】:

    • 有没有办法做到这一点之前列被命名?在这种情况下,我只会有一个 5x5 表:未添加 epoch 和 mean 列,未添加标题。
    • 这更简单,只需删除.filter(...),即df.iloc[-1]....
    • 这成功了!但是,我必须命名列然后进行删除,然后再次命名列以使其正常工作。如果没有标题,每列都命名为0,因此当它找到要删除的列时,它会删除所有列,因为它们具有相同的名称。
    猜你喜欢
    • 2019-07-04
    • 1970-01-01
    • 2021-12-23
    • 2016-05-07
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 2017-05-24
    相关资源
    最近更新 更多