首页 > 解决方案 > 按值过滤相同类型的DataFrame

问题描述

我必须从本质上DataFrame关联Type1并始终返回 type 的状态。的内容表明我应该只使用一个数组,但我需要能够像字典一样索引它,这就是我使用. 如果有更好的设计方法请告诉我。Type2df[t1][t2]StateDataFramenumpyDataFrame

我正在尝试收集所有type1,type2组合的列表,其中它们在df特定状态下的值匹配。我可以过滤一行:

row = df[type1]
row[row == state]

但是我怎样才能过滤整个DataFrame

标签: pythonpython-2.7pandas

解决方案


我建议将格式更改为MultiTndex Series

np.random.seed(100)
df = pd.DataFrame(np.random.randint(10, size=(3,3)), columns=list('ABC'))
print (df)
   A  B  C
0  8  8  3
1  7  7  0
2  4  2  5

a = df.stack()
print (a)
0  A    8
   B    8
   C    3
1  A    7
   B    7
   C    0
2  A    4
   B    2
   C    5
dtype: int32

b = a[a == 8].index.remove_unused_levels().tolist()
print (b)
[(0, 'A'), (0, 'B')]

编辑:

为了获得更好的性能,可以使用numpy.where匹配值的索引,然后将zip索引和列名索引到元组:

np.random.seed(100)
df = pd.DataFrame(np.random.randint(10, size=(3,3)), columns=list('ABC'))
print (df)
   A  B  C
0  8  8  3
1  7  7  0
2  4  2  5

a =  np.where(df == 8)
print (a)
(array([0, 0], dtype=int64), array([0, 1], dtype=int64))

b = list(zip(df.index[a[0]], df.columns[a[1]]))
print (b)
[(0, 'A'), (0, 'B')]

推荐阅读