比较嵌套在列表中的不同数据框中的元素

时间:2018-10-09 10:03:16

标签: python python-3.x pandas list dataframe

我有大约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 :(得分:0)

您可以通过concatMultiIndex创建一个大的DataFrame:

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

然后如果每个数据帧需要最大值:

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