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ť dataframe
s, 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ď č. 1Použ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