Python Pandas groupby:根据值的条件进行过滤和应用

雨伞

我有这个熊猫数据框

interval_mins = {
    '10' : 0.11,
    '15' : 0.4,
    '20' : 0.19
}
pd.DataFrame({
    'id' : [10, 15, 20, 10, 20, 15],
    'interval' : [0.1, 0.39, 0.2, 0.12, 0.25, 0.42]
})

在pandas DataFrame中,我想选择interval值小于interval_mins每个值的项目id,然后将其添加到intervalsame的下一个id

有没有不用的方法for吗?

预期产量:

pd.DataFrame({
    'id' : [10, 15, 20, 10, 20, 15],
    'interval' : [0.1, 0.39, 0.2, 0.22, 0.25, 0.81]
})

在此处输入图片说明

Shubham Sharma

让我们做:

m = df['interval'] < df['id'].astype(str).map(interval_mins)
df.loc[m.groupby(df['id']).shift(fill_value=False), 'interval'] += df.groupby('id')['interval'].shift()

细节:

创建一个布尔掩码,表示interval值小于interval_mins每个值的条件id

print(m)

0     True
1     True
2    False
3    False
4    False
5    False
dtype: bool

groupby布尔面具midshift向下:

print(m.groupby(df['id']).shift(fill_value=False))

0    False
1    False
2    False
3     True
4    False
5     True
dtype: bool

groupby在数据框id,并shiftinterval列:

print(df.groupby('id')['interval'].shift())

0     NaN
1     NaN
2     NaN
3    0.10
4    0.20
5    0.39
Name: interval, dtype: float64

使用布尔索引与loc来添加与移位后的掩码相对应的值:

print(df)

   id  interval
0  10      0.10
1  15      0.39
2  20      0.20
3  10      0.22
4  20      0.25
5  15      0.81

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章