Chcę indeksować ramkę danych Pandy przy użyciu maski boolowskiej, a następnie ustawić wartość w podzbiorze przefiltrowanej ramki danych na podstawie indeksu całkowitoliczbowego i odzwierciedlić tę wartość w ramce danych. To znaczy, byłbym szczęśliwy, gdyby działało to na widok ramki danych.Indeksowanie pand przez oba boolowskie `loc` i kolejne` iloc`
przykład:
In [293]:
df = pd.DataFrame({'a': [0, 1, 2, 3, 4, 5, 6, 7],
'b': [5, 5, 2, 2, 5, 5, 2, 2],
'c': [0, 0, 0, 0, 0, 0, 0, 0]})
mask = (df['a'] < 7) & (df['b'] == 2)
df.loc[mask, 'c']
Out[293]:
2 0
3 0
6 0
Name: c, dtype: int64
teraz ja je ustawić wartości dwóch pierwszych elementów zwróconych w filtrowanej dataframe. Łączenia się iloc
na wezwanie loc
powyżej działa index:
In [294]:
df.loc[mask, 'c'].iloc[0: 2]
Out[294]:
2 0
3 0
Name: c, dtype: int64
Ale nie przypisywać:
In [295]:
df.loc[mask, 'c'].iloc[0: 2] = 1
print(df)
a b c
0 0 5 0
1 1 5 0
2 2 2 0
3 3 2 0
4 4 5 0
5 5 5 0
6 6 2 0
7 7 2 0
Making wartość przypisać taką samą długość jak wycinka (tj = [1, 1]
) również nie działa . Czy istnieje sposób na przypisanie tych wartości?
try 'df.loc [ mask [0: 2], 'c'] = 1' –
@PaulH, który wywołuje 'IndexingError: Niepowtarzalny klucz Boolean Series provided' – EdChum
oh, zapomniałem, że' maska' była serią ... może 'df.loc [ mask.iloc [0: 2], "c"] '? –