有条件地选择多个(相邻)行

时间:2017-01-11 12:05:35

标签: python pandas numpy

我希望返回符合特定条件的行。我可以为单行执行此操作,但我需要将此行组合在一起。例如'浅绿色'有资格获得XYZ'积极的,总的来说' > 10,其中' Red'才不是。当我组合相邻的一行或多行时,它确实=> '深绿色'。我可以在所有行中实现此操作而不返回重复的行吗?

N = 1000

np.random.seed(0)

df = pd.DataFrame(
    {'X':np.random.uniform(-3,10,N),
     'Y':np.random.uniform(-3,10,N),
     'Z':np.random.uniform(-3,10,N),
    })

df['total'] = df.X + df.Y + df.Z

df.head(10)

enter image description here

EDIT;

所需的输出是' XYZ'> 0和'总计' > 10

2 个答案:

答案 0 :(得分:1)

在这里尝试一下。您可能希望使用rollingexpanding(速度和优雅)而不是使用range显式循环,但我这样做是为了能够打印出行用于计算每个布尔值。

df = df[['X','Y','Z']]    # remove the "total" column in order
                          # to make the syntax a little cleaner

df = df.head(4)           # keep the example more manageable

for i in range(len(df)):
    for k in range( i+1, len(df)+1 ):
        df_sum = df[i:k].sum()
        print( "rows", i, "to", k, (df_sum>0).all() & (df_sum.sum()>10) )

rows 0 to 1 True
rows 0 to 2 True
rows 0 to 3 True
rows 0 to 4 True
rows 1 to 2 False
rows 1 to 3 True
rows 1 to 4 True
rows 2 to 3 True
rows 2 to 4 True
rows 3 to 4 True

答案 1 :(得分:-1)

我不太确定我是否正确理解了您的问题,但是如果您希望在数据框中设置多个条件,则可以考虑这种方法:

new_df = df[(df["X"] > 0) & (df["Y"] < 0)]

&条件用于AND,而用|替换是条件。记得在()中加入不同的条件。

最后,如果要删除重复项,可以使用此

new_df.drop_duplicates()

您可以在此处找到有关此功能的更多信息:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.drop_duplicates.html

希望我的回答对你有用。