我有这个熊猫数据框
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
,然后将其添加到interval
same的下一个值id
。
有没有不用的方法for
吗?
预期产量:
pd.DataFrame({
'id' : [10, 15, 20, 10, 20, 15],
'interval' : [0.1, 0.39, 0.2, 0.22, 0.25, 0.81]
})
让我们做:
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
布尔面具m
上id
和shift
向下:
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
,并shift
在interval
列:
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] 删除。
我来说两句