繁体   English   中英

Pandas 在多个条件下删除行

[英]Pandas drop rows on multiple conditions

我有一个 dataframe:

from_dict = {'weekday': {1937: 'Thursday',
                    1938: 'Thursday',
                    1939: 'Thursday',
                    1940: 'Friday',
                    1941: 'Friday',
                    1942: 'Friday',
                    1943: 'Saturday'},
        'sort': {1937: 'pre',
                 1938: 'day',
                 1939: 'twi',
                 1940: 'pre',
                 1941: 'day',
                 1942: 'twi',
                 1943: 'pre'},
        'volume': {1937: 48840,
                   1938: 43936,
                   1939: 48393,
                   1940: 47675,
                   1941: 42271,
                   1942: 46270,
                   1943: 28721}}
df = pd.DataFrame.from_dict(from_dict)
       weekday sort  volume
1937  Thursday  pre   48840
1938  Thursday  day   43936
1939  Thursday  twi   48393
1940    Friday  pre   47675
1941    Friday  day   42271
1942    Friday  twi   46270
1943  Saturday  pre   28721

我只想切出 'weekday' == 'Friday' & 'sort' == 'day' 的行和 'weekday' == 'Thursday' & 'sort' == 'day' 的行

       weekday sort  volume
1937  Thursday  pre   48840
1939  Thursday  twi   48393
1940    Friday  pre   47675
1942    Friday  twi   46270
1943  Saturday  pre   28721

我更喜欢对行进行切片的原因是因为这个数据框被传递到一个 pivot_table 而我不关心创建一个新变量或修改原始数据框。 我尝试按多种条件进行切片,但显然没有用。

sort_df[((sort_df['weekday'] != 'Thursday') & (sort_df['sort'] != 'day'))]

这只会删除星期四和星期四的所有行。 我知道答案会非常明显,我现在肯定知道了。

尝试:

>>> df[~(df["weekday"].isin(["Thursday", "Friday"])&df["sort"].eq("day"))]
       weekday sort  volume
1937  Thursday  pre   48840
1939  Thursday  twi   48393
1940    Friday  pre   47675
1942    Friday  twi   46270
1943  Saturday  pre   28721

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM