Сравнение элементов из разных фреймов данных, вложенных в список - PullRequest
0 голосов
/ 09 октября 2018

У меня есть около 80 CSV-файлов с одинаковой структурой (одинаковые имена столбцов и одинаковое количество строк), из которых я хочу получить максимальное значение в каждой ячейке из всего набора файлов.
На данный момент я хотел загрузить ихв списке, а затем сравнить, но у меня проблемы с получением значений ячеек из вложенных фреймов данных.
Это код для загрузки CSV в список фреймов данных:

import glob
allFiles = glob.glob("./*.txt")
results = [None]*len(allFiles)
i=0
for file_ in allFiles:
    results[i] = pd.read_csv(file_, sep = "\t")
    i=i+1

И,в качестве примера, давайте попробуем сравнить эти два файла:

a.txt
t   a   b
0   1   2
1   3   4
2   5   6

b.txt
t   a   b
0   1   3
1   0   2
2   7   9

Каждый элемент в списке результатов представляет собой фрейм данных:

>> results[i].info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 1 columns):
t   a   b    3 non-null object
dtypes: object(1)

Я хочу найти максимальное значениедва кадра данных в каждой ячейке, и в качестве окончательного результата они выводят другой кадр данных с максимальным значением, соответствующим этой позиции, что в данном случае может привести к:

t   a   b
0   1   3
1   3   4
2   7   9

Как мне это сделать?Это?Или, может быть, есть лучший способ установить всю проблему?
Спасибо

1 Ответ

0 голосов
/ 09 октября 2018

Вы можете создать один большой DataFrame с MultiIndex на concat:

allFiles = glob.glob("./*.txt")
results = [pd.read_csv(file_, sep = "\t") for file_ in allFiles]

names = [os.path.basename(f).split('.')[0] for f in allFiles]
df = pd.concat(results, keys=names)
print (df)
     t   a   b
a 0  0   1   2
  1  1   3   4
  2  2   5   6
b 0  0   1   3
  1  1   0   2
  2  2   7   9

И затем, если нужно, максимальные значения для каждого DataFrame:

max_val = df.max(level=0)
print (max_val)
   t   a   b
a  2   5   6
b  2   7   9

max_val = df.max(level=1)
print (max_val)
   t   a   b
0  0   1   3
1  1   3   4
2  2   7   9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...