根据列的平均值更改列索引

时间:2019-04-02 13:56:09

标签: python pandas

我有两个输入文本文件,TestA.txt和TestB.txt。文件如下:

TestA.txt
ABA     50000   2.3
BAA     75000   1.75
BBA     100000  2
TEST    100000  2.4

TestB.txt
ABA     2.3     50000
BAA     1.75    75000
BBA     2       100000
TEST    2.4     100000

当我尝试一个一个地传递每个文件时,它在下面的代码中工作得很好。但是,当我同时传入两个文件时,它会跳转到else情况。

我试图写一个if else案例来解决这个问题,但是由于某种原因,如果文件没有单独传递,它会跳转到else案例而不是elif。

from pathlib import Path
import pandas as pd

df = pd.DataFrame()
folder = Path("C:\\Users\\Project")
for f in folder.glob("*.txt"):
    with open(f) as fin:
        chk_lst = next(fin).split()
    is_h = not any(v[0].isdecimal() for v in chk_lst)
    df = pd.concat([df, pd.read_csv(f, sep='\s+', header=None, skiprows=(0, 1)[is_h])], axis=0, ignore_index=True)

ticker = df[0].str.split()    
mean1 = df[1].mean()
mean2 = df[2].mean()

pct_change = (100 * (mean2 - mean1)/mean1)
pct_change_flip = (100 * (mean1 - mean2)/mean2)
# print(pct_change)

if mean2 > mean1 and abs(pct_change_flip) > 95:
    df = df[[0, 2, 1]]
    df.columns = ['Identifier', 'Quantity', 'Rate']
    print(df)
elif mean1 > mean2 and abs(pct_change) > 95:
    df.columns = ['Identifier', 'Quantity', 'Rate']
    print(df)

else:
    print("Please conduct manual check of data.")

我的目标是尝试翻转所有进入的文件的索引,使其看起来像TestA.txt。这意味着,所有输出的第一列应具有标识符,第二列应具有较大的值,第三列应具有较小的速率值。

最终的情况应该是

Identifier  Quantity    Rate
ABA         50000       2.3
BAA         75000       1.75
BBA         100000      2
TEST        100000      2.4
Identifier  Quantity    Rate
ABA         50000       2.3
BAA         75000       1.75
BBA         100000      2
TEST        100000      2.4

1 个答案:

答案 0 :(得分:0)

您可以使用pandas的{​​{1}}函数在处理任何内容之前预先设置列索引。

loc