我有以下 Dataframe :
#Load the required libraries
import pandas as pd
#Create dataset
data = {'id': [1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2,
3, 3, 3, 3, 3, 3,
4, 4, 4, 4,
5, 5, 5, 5, 5,5, 5, 5,5],
'cycle': [1,2, 3, 4, 5,6,7,8,9,10,11,
1,2, 3,4,5,6,
1,2, 3, 4, 5,6,
1,2, 3, 4,
1,2, 3, 4, 5,6,7,8,9,],
'Salary': [7, 7, 7,8,9,10,11,12,13,14,15,
4, 4, 4,4,5,6,
8,9,10,11,12,13,
8,9,10,11,
7, 7,9,10,11,12,13,14,15,],
'Children': ['No', 'Yes', 'Yes', 'Yes', 'Yes', 'No','No', 'Yes', 'Yes', 'Yes', 'No',
'Yes', 'Yes', 'No', 'Yes', 'Yes', 'Yes',
'No','Yes', 'Yes', 'No','No', 'Yes',
'Yes', 'No','Yes', 'Yes',
'No', 'Yes', 'No', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'No',],
'Days': [123, 128, 66, 66, 120, 141, 52,96, 120, 141, 52,
96, 120,120, 141, 52,96,
15,123, 128, 66, 120, 141,
141,123, 128, 66,
123, 128, 66, 123, 128, 66, 120, 141, 52,],
}
#Convert to dataframe
df = pd.DataFrame(data)
print("df = \n", df)
上面的dataframe看起来是这样的:
这里,每个id根据“cycle”列具有不同的周期。
id-1具有最大11个周期。
ID-2具有最大6个周期。
ID-3具有最大6个周期。
ID-4具有最大4个周期。
ID-5具有最大9个周期。
我对'cycles'有一定的阈值限制。假设cycle_threshold = 8
如果最大循环且id〈cycle_threshold,则'Days'列保持不变。否则,'Days'列将被标记为'NA'。
比如说
对于id-2,由于最大循环数为6,即〈8,因此“天数”列保持不变
然而,对于id-1,由于最大周期是11,其〉8,因此“天数”列变为“NA”。
结果如下所示:
有人能告诉我如何在Python中实现这个任务吗?
2条答案
按热度按时间ht4b089n1#
IIUC,你可以得到
id
每列cycle
,并检查它是否大于8。如果是,将整个组屏蔽为NaNpkwftd7m2#
使用
GroupBy.transform
获取每组的最大cycle
,通过cycle_threshold
进行比较,并在Series.where
中设置NaN
s: