Grafik temsil eden pandalar DataFrame ile çalışıyorum. Veri çerçevesi, düğüm bitiş noktalarını belirten bir MultiIndex ile endekslenir.Pandalar Numpy dizileriyle MultiIndex araması
Kurulumu:
BenMultiIndex
kullanmayı tercih ettik yüzden bir kenar alt kümesini kullanarak grafiğin içine dizine mümkün istiyorum
import pandas as pd
import numpy as np
import itertools as it
edges = list(it.combinations([1, 2, 3, 4], 2))
# Define a dataframe to represent a graph
index = pd.MultiIndex.from_tuples(edges, names=['u', 'v'])
df = pd.DataFrame.from_dict({
'edge_id': list(range(len(edges))),
'edge_weight': np.random.RandomState(0).rand(len(edges)),
})
df.index = index
print(df)
## -- End pasted text --
edge_id edge_weight
u v
1 2 0 0.5488
3 1 0.7152
4 2 0.6028
2 3 3 0.5449
4 4 0.4237
3 4 5 0.6459
. Bunu, df.loc
numaralı girdinin bir tupl listesi olduğu sürece yapabilirim. kenarlarının benim listesi (genellikle olduğu gibi) bir numpy dizidir veya listelerin listesi ne zaman
# Select subset of graph using list-of-tuple indexing
edge_subset1 = [edges[x] for x in [0, 3, 2]]
df.loc[edge_subset1]
## -- End pasted text --
edge_id edge_weight
u v
1 2 0 0.5488
2 3 3 0.5449
1 4 2 0.6028
Ancak, o zaman ben df.loc
özelliğini kullanmak mümkün görünmektedir.
# Why can't I do this if `edge_subset2` is a numpy array?
edge_subset2 = np.array(edge_subset1)
df.loc[edge_subset2]
## -- End pasted text --
TypeError: unhashable type: 'numpy.ndarray'
Ben sadece tüm arr.tolist()
, ancak bu görünüşte farklı hatasına yol açar eğer Tamam olurdu.
# Why can't I do this if `edge_subset2` is a numpy array?
# or if `edge_subset3` is a list-of-lists?
edge_subset3 = edge_subset2.tolist()
df.loc[edge_subset3]
## -- End pasted text --
TypeError: '[1, 2]' is an invalid key
Gerçek bir ağrı bir alt kümesini seçmek istediğiniz her seferinde list(map(tuple, arr.tolist()))
kullanmak zorunda kalmak var. Bunu yapmanın başka bir yolu olsaydı iyi olurdu.
ana gösterilen sorular şunlardır:
Neden
.loc
ile numpy dizi kullanamıyorum? Kaputun altında, çoklu indeks etiketlerini konum endekslerine eşlemek için bir sözlük kullanılıyor mu?Listeler listesi neden farklı bir hata veriyor? Belki de gerçekten aynı sorun sadece farklı bir şekilde yakalandı?
Veri kümesinin bir alt kümesini, farkında olmadığım çok dizili etiketlerin bir dizi dizisini aramak için başka (ideal olarak daha az ayrıntılı) bir yol var mı?
Not: df.edge_id [edge_subset2] 'çalışır - bu, bir dizin üzerinde bir dizinde desteklenir, ancak bir nedenle DataFrame desteklenmez. Tuhaf olarak, 'df.edge_id.loc [edge_subset2]' da (hiçbir sebepten dolayı, "loc" olmadan çalıştığı için) başarısız olur. Bunu Panda'lara göndermeni öneririm: https://github.com/pandas-dev/pandas/issues –