/ Ako odstrániť riadky z viacerých dátových rámcov, ktoré sú vo vnútri slovníka python - python, r, python - 3.x, pandy, slovník

Ako odstrániť riadky z viacerých dátových rámcov, ktoré sú vo vnútri slovníka python - python, r, python - 3.x, pandy, slovník

mám dictionary ktorý obsahuje veľa dataframes.

Ukážkové údaje:

dataframe1 = pd.DataFrame({"variable1":["a","a","b"]})
dataframe2 = pd.DataFrame({"variable1":["b","a","b"]})
dictionary = dict(zip(["dataframe1","dataframe2"],[dataframe1,dataframe2]))

Čo by som chcel urobiť, je vytvoriť nový dictionary, ktorá bude obsahovať dataframes, ale vylúči riadky z každého dátového rámca, pre ktorý variable1=="a"

Ekvivalent R príkaz s lists bolo by

dictionary_new <- lapply(dictionary ,function(x){x[!variable1=="a",]})

Ako to môžem preložiť? Python ?

odpovede:

4 pre odpoveď č. 1

Použite dict s porozumením query alebo boolean indexing, Pre vylúčenie a potrebujete filtrovať všetky hodnoty, ktoré nie sú a.

dictionary = {k:v.query("variable1!="a"") for k, v  in dictionary.items()}

alebo:

dictionary = {k:v[v.variable1!="a"] for k, v  in dictionary.items()}
print (dictionary)


{"dataframe1":   variable1
2         b, "dataframe2":   variable1
0         b
2         b}

1 pre odpoveď č. 2

Môžete tiež použiť:

dictionary = {k:v.loc[v.variable1!="a",:] for k, v  in dictionary.items()}

Zdá sa, že @jezrael druhý návrh je najrýchlejší:

In [94]: timeit {k:v.query("variable1!="a"") for k, v  in dictionary.items()}
100 loops, best of 3: 1.83 ms per loop

In [95]: timeit {k:v[v.variable1!="a"] for k, v  in dictionary.items()}
1000 loops, best of 3: 533 µs per loop

In [96]: timeit {k:v.loc[v.variable1!="a",:] for k, v  in dictionary.items()}
1000 loops, best of 3: 593 µs per loop