我已经为数据创建了一个嵌套字典,该字典想转换为pandas数据框,并在以后用它平均数据的某些子集。
简而言之,我从一个空字典开始
scores = {}
,然后通过遍历4个类别填充它
scores[(subdir, method, time, 'nMI')].append(nMItemp)
我将其转换为熊猫数据框
df = pd.DataFrame(scores)
看起来像这样
我现在想做的是,例如,将父组“ mu_0.2”和“”中的所有类别“ 0.316228 0.562341 1.000000 1.778279 3.162278 ...”之间的所有数据“ nMI”逐行平均。 moduleity_signed”。
有人可以解释如何做吗?如果此数据结构不是实现此目标的最佳方法,您能建议一个更好的方法吗?
答案 0 :(得分:1)
如果要返回多索引上的特定列,则可以使用.loc
。我相信这可以解决问题。选择所需的列后,即可执行.mean()
。可惜我无法生成与您的数据匹配的内容。如果您可以提供具有相同结构的示例数据,那么我的示例可以适合您的情况:
df_output = df.loc[:,('mu_0.2','modularity_signed',slice(None),'nMI')]
可以在此处查看示例:
import pandas as pd
import numpy as np
arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']),np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(3, 8), index=['A', 'B', 'C'], columns=index)
print(df)
print(df.loc[:,(('bar','foo'),'one')])
原始数据框:
first bar baz foo qux
second one two one two one two one two
A -0.025131 -2.455114 -0.558735 -0.235553 0.250540 -1.444213 1.030049 -1.642283
B 0.558622 -1.304947 -0.457322 -1.726946 0.184681 -0.240676 -0.890618 -0.192366
C 0.345557 -0.339904 1.114021 -0.636077 -0.187887 0.472014 -0.540658 -0.527172
用.loc
过滤后:
first bar foo
second one one
A -0.025131 0.250540
B 0.558622 0.184681
C 0.345557 -0.187887