当满足多个条件时,我正在尝试使用另一个创建一个新的 df。 如 - 我有一个包含压力和深度数据的 df,我想将其拆分为三个较小的 df。
a shallow one < 2900m
the mid range > 2901m but <3500m
and deep >3501m
我试过看起来像这样的鳕鱼:
mid =df[df.depth > 2958 & < 3530]
对于中间的,得到一个无效的语法。
如果只有一个条件我可以做到:
shallow = df[df.depth < 2900]
它工作得很好,我只是不确定如何将多个条件放入
答案 0 :(得分:0)
对于多个条件,您可以使用 &
逻辑将它们连接在一起。例如,您还应该使用 或等于 以便您的条件在 [2900, 2901] 之间没有间隙。
import pandas as pd
import numpy as np
df = pd.DataFrame({'depth': np.linspace(2700, 3900, 13)})
df[(df['depth'] >= 2900) & (df['depth'] < 3500)]
# depth
#2 2900.0
#3 3000.0
#4 3100.0
#5 3200.0
#6 3300.0
#7 3400.0
#Equivalently with the `.lt`, `.gt`, `.le`, `.ge`, `.ne`, `.eq` operators
df[df['depth'].ge(2900) & df['depth'].lt(3500)]
如果要存储每个子 DataFrame,这需要您定义可变数量的变量。如果需要,您可以将 pd.cut
与 groupby 一起使用,而不是这样做,以将结果存储在 dict
中(或仅对 groupby
对象进行操作)。
d = dict(tuple(df.groupby(pd.cut(df['depth'], [-np.inf, 2900, 3500, np.inf],
right=False, labels=['shallow', 'mid', 'deep']))))
d['shallow']
# depth
#0 2700.0
#1 2800.0
d['mid']
# depth
#2 2900.0
#3 3000.0
#4 3100.0
#5 3200.0
#6 3300.0
#7 3400.0
d['deep']
# depth
#8 3500.0
#9 3600.0
#10 3700.0
#11 3800.0
#12 3900.0