在pandas中,最后一行的最高值的列数被删除。

我有多个单列的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 有一个内置的根据某行的值来删除列的功能吗?我对某一列的最后一行感兴趣,并删除其中数值最高的列。

解决方案:

这可能有点杀伤力过大。

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)

给TA打赏
共{{data.count}}人
人已打赏
未分类

使用java创建二维数组列表

2022-9-10 15:35:20

未分类

列表视图适配器总是删除最后一行

2022-9-10 15:46:18

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索