【问题标题】:Comparing elements from different dataframes nested in a list比较嵌套在列表中的不同数据框的元素
【发布时间】:2019-03-14 01:44:51
【问题描述】:

我有大约 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

我怎样才能做到这一点? 或者也许有更好的方法来解决整个问题?
谢谢

【问题讨论】:

  • 没有minimal reproducible example 不清楚你在问什么。您发布的代码似乎与实际问题完全无关(比较来自不同数据框的元素)。给我们一些示例数据框和您想要的输出。
  • 由于我无法访问列出的数据框中的元素,因此我没有设法编写任何代码进行比较。现在,我添加了我用作示例的两个 csv 文件。希望现在更清楚了
  • 感谢您提供示例数据框。 “我无法访问里面的元素”仍然含糊不清。你想访问哪些值,你想用它们做什么?
  • 我想获得,对于数据框中的每个单元格,考虑到列表中存在的所有数据框的最大值
  • 酷,现在我们有一个可以回答的问题!

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


【解决方案1】:

您可以通过concat 使用MultiIndex 创建一个大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

然后如果需要每个 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

【讨论】:

    猜你喜欢
    • 2021-11-04
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 2020-03-06
    • 2015-03-11
    • 2020-09-25
    相关资源
    最近更新 更多