如何在Python中按id分组提取cycle列值为自然数的行?
筛选每个id下cycle为自然数的行
给定如下Pandas数据集:
#Load the required libraries import pandas as pd #Create dataset data = {'id': [1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,3, 4, 4, 4, 4, 4,4, 5, 5, 5, 5, 5, 5,5, 5, 5,5, 5,5, 5,5, 5, 5,5], 'cycle': [0.0, 0.2,0.4, 0.6, 0.8, 1,1.2,1.4,1.6,1.8,2.0,2.2, 0.0, 0.2,0.4, 0.6,0.8,1.0,1.2, 0.0, 0.2,0.4, 0.6, 0.8,1.0,1.2,1.4, 0.0, 0.2,0.4, 0.6, 0.8,1.0, 0.0, 0.2,0.4, 0.6, 0.8, 1.0,1.2,1.4,1.6,1.8, 2.0,2.2,2.4,2.6,2.8,3.0,3.2], 'Salary': [6, 7, 7, 7,8,9,10,11,12,13,14,15, 3, 4, 4, 4,4,5,6, 2, 8,9,10,11,12,13,14, 1, 8,9,10,11,12, 6, 7, 7,9,10,11,12,13,14,15, 9,10,11,12,13,14,15], 'Children': ['Yes', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'No','No', 'Yes', 'Yes', 'Yes', 'No', 'Yes', 'Yes', 'Yes', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'No','Yes', 'Yes', 'No','No', 'Yes','Yes', 'Yes', 'Yes', 'No','Yes', 'Yes','Yes', 'Yes', 'No', 'Yes', 'No', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'No', 'No', 'Yes', 'No', 'No', 'Yes', 'Yes', 'Yes'], 'Days': [141, 123, 128, 66, 66, 120, 141, 52,96, 120, 141, 52, 141, 96, 120,120, 141, 52,96, 141, 15,123, 128, 66, 120, 141, 141, 141, 141,123, 128, 66,67, 141, 123, 128, 66, 123, 128, 66, 120, 141, 52, 123, 128, 66, 123, 128, 66, 120,], } #Convert to dataframe df = pd.DataFrame(data)
需求是:针对每个id,仅提取cycle列值为自然数(即无小数部分的数值,如0.0、1.0、2.0等)的行。
解决方案
可以通过两种简单的条件判断实现筛选,两种方法效果一致:
方法1:判断cycle值等于其整数形式
# 筛选符合条件的行 filtered_df = df[df['cycle'] == df['cycle'].astype(int)] # 输出结果 print(filtered_df)
方法2:判断cycle除以1的余数为0
# 筛选符合条件的行 filtered_df = df[df['cycle'].mod(1) == 0] # 输出结果 print(filtered_df)
以上代码会自动保留所有cycle为自然数的行,同时保留对应的id信息,自然满足"针对每个id提取"的需求。
内容的提问来源于stack exchange,提问作者NN_Developer
相关产品推荐
相关产品推荐

