Warum gibt .loc
nur eine einzelne Zeile zurück, wo mehrere Zeilen die gleiche MultiIndex
haben?Inkonsistenz zwischen Pandas xs und loc für wiederholte Indizes
die folgenden Datenrahmen
col0 col1 col2
idx0 idx1
0 0 1.0 example1 1.0
0 4.0 example2 8.0
1 9.0 example3 27.0
1 16.0 example4 64.0
1 0 0.5 example1 0.5
0 2.0 example2 4.0
1 4.5 example3 13.5
1 8.0 example4 32.0
die .xs
Beim Betrieb
In [121]: df.xs((0,1), level=[0,1])
Out[121]:
col0 col1 col2
idx0 idx1
0 1 9.0 example3 27.0
1 16.0 example4 64.0
während der .loc
Betrieb wählt
In [125]: df.loc[[(0,1)]]
Out[125]:
col0 col1 col2
idx0 idx1
0 1 16.0 example4 64.0
Dies markiert ist noch weiter durch die folgende
wählen wirdIn [149]: df.loc[pd.IndexSlice[:, 1], :]
Out[149]:
col0 col1 col2
idx0 idx1
0 1 9.0 example3 27.0
1 16.0 example4 64.0
In [150]: df.loc[pd.IndexSlice[0, 1], :]
Out[150]:
col0 16
col1 example4
col2 64
Name: (0, 1), dtype: object
Set Up
import pandas as pd
import numpy as np
idx0 = range(2)
idx1 = np.repeat(range(2), 2)
midx = pd.MultiIndex(
levels=[idx0, idx1],
labels=[
np.repeat(range(len(idx0)), len(idx1)),
np.tile(range(len(idx1)), len(idx0))
],
names=['idx0', 'idx1']
)
df = pd.DataFrame(
[
[i**2/float(j), 'example{}'.format(i), i**3/float(j)]
for j in range(1, len(idx0) + 1)
for i in range(1, len(idx1) + 1)
],
columns=['col0', 'col1', 'col2'],
index=midx
)
Dies ist besonders ungewöhnlich gegeben, dass [mit einem Basisindex, 'loc' zurückkehren alle Instanzen des Labels, wenn du Duplikate hast.] (https://stackoverflow.com/a/45636490/7954504) –
FYI: Wenn du den Index mit 'np.array' als' dtype = int' initiierst, dann immer noch hat Probleme, so ist es kein Problem mit Gleitkomma –
Welche Version von Pandas verwenden Sie? – Alexander