按條件將資料幀分成兩個的慣用方法是什么?或者換句話說,按條件過濾資料幀但將過濾掉的行保留在新資料幀中?
我在想我可以使用波浪號過濾“按條件過濾”行的倒數的原始資料幀,如下所示:
# this obviously doesnt work, though it would seem idiomatic to me.
# is there a clean / idiomatic solution?
vowels = df[~nonvowels]
import pandas as pd
dl = [
{'letter':'a','number':1,'vowel':True},
{'letter':'b','number':2,'vowel':False},
{'letter':'c','number':3,'vowel':False},
{'letter':'d','number':4,'vowel':False},
{'letter':'e','number':5,'vowel':True},
{'letter':'f','number':6,'vowel':False},
{'letter':'g','number':7,'vowel':False},
{'letter':'x','number':24,'vowel':False},
{'letter':'y','number':25,'vowel':None},
{'letter':'z','number':26,'vowel':False}
]
df = pd.DataFrame(dl)
print (df)
# a filter
nonvowels = df[df['vowel'] == False]
# one solution- i know i can do this with the drop method, passing it the 'filtered df''s index to the original df drop method as a list...
vowels = df.drop(nonvowels.index.tolist())
# but i was curious if there was an idiomatic way to store filtered rows of a
# dataframe and also store/keep it's 'inverse'
# as stated above, my inuition thinks once i have nonvowels in a df, i should be able to do something like:
# vowels = df[~nonvowels]
# but that doesnt work...
print (nonvowels)
print (vowels)
uj5u.com熱心網友回復:
調節器或過濾器是df['vowel'] == False;不是df[df['vowel'] == False]。因此,您可以否定調節器并使用它,而不是否定已經過濾的資料幀。但在此之前,讓我們將其更改為,df['vowel'] == True因為您有一些Nones,這可能意味著False. 所以
cond = df['vowel'] == True
vowels = df[cond]
non_vowels = df[~cond]
uj5u.com熱心網友回復:
你可以使用df.loc df.index.differencewithnonvowels.index來實作你想要的(是的,這是慣用的):
vowels = df.loc[df.index.difference(nonvowels.index)]
輸出:
>>> vowels
letter number vowel
0 a 1 True
4 e 5 True
8 y 25 None
uj5u.com熱心網友回復:
您可以使用布爾系列將資料框拆分為不同的段。本例中的不同段,元音、非元音和空值可以通過以下方式拆分:
is_vowel_boolean_series = df["vowel"] == True
vowels_df = df[is_vowel_boolean_series]
nonvowels_df = df[~is_vowel_boolean_series]
nulls_df = df[df["vowel"].isna()]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/399121.html
