使用Pandas进行条件切片(优雅的方式)

时间:2017-02-28 10:34:23

标签: python pandas

我需要根据某些标准拆分整个数据框(Pandas)。例如:

import pandas as pd
import numpy as np

a = np.random.random(size=(1,10))
b = np.random.randint(100,size=a.shape)
df = pd.DataFrame(array((a,b)).T,columns=['a','b'])

现在,如果我想将数据框分成两部分,其中df [' a']> = 30和df [' a']< 30

df_two = [df[df['a'] < 30], df[df['a']>=30]]

是否有更优雅的方法根据某些条件分割数据框?使用列表理解还是循环?例如,如果我有更多只有一个条件,我想迭代一个条件列表而不是手动完成。

2 个答案:

答案 0 :(得分:2)

您可以使用:

mask = df['a'] < 30
df_two = [df[mask], df[~mask]]

答案 1 :(得分:1)

我们假设你有多个条件通过字符串表示,如:

conditions = ("a < 30", "a > 50", "b < 10 and a > 10")

您可以使用字典理解和辅助函数splitter迭代它们并创建拆分(包括和排除条件):

def splitter(sub_df, condition):
    bool_split = sub_df.eval(condition)
    return (sub_df[bool_split], sub_df[~bool_split])

splits = {cond: splitter(df, cond) for cond in conditions}

结果是一个字典,条件为键,分割数据帧为值。