我希望返回符合特定条件的行。我可以为单行执行此操作,但我需要将此行组合在一起。例如'浅绿色'有资格获得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)
EDIT;
所需的输出是' XYZ'> 0和'总计' > 10
答案 0 :(得分:1)
在这里尝试一下。您可能希望使用rolling
或expanding
(速度和优雅)而不是使用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
希望我的回答对你有用。