如何仅在具有多个不同值的情况下基于其他列删除行



我有什么

我有一个这样的数据帧:

id    value 
0    0       5
1    0       5
2    0       6
3    1       7   
4    1       7 

我想要什么

我想删除id超过一个不同值的所有行。在上面的例子中,我想删除id=0 的所有行

id    value
3      1      7
4      1      7

我试过什么

import pandas as pd
df = pd.DataFrame({'id':[0, 0, 0, 1, 1], 'value':[5,5,6,7,7]})
print(df)
id_list = df['id'].tolist() 
id_set = set(id_list)
for id in id_set:
temp_list = df.loc[df['id'] == id,'value'].tolist()
s = set(temp_list)
if len(s) > 1:
df = df.loc[df['id'] != id]

它有效,但它丑陋且效率低下

使用熊猫法有更好的滋补方法吗

GroupBy.transformDataFrameGroupBy.nunique用于Series的唯一值数量,因此可以在boolean indexing:中进行比较和筛选

df = df[df.groupby('id')['value'].transform('nunique').eq(1)]
print (df)
id  value
3   1      7
4   1      7
# Try this code #        
import pandas as pd
id1 = pd.Series([0,0,0,1,1])
value = pd.Series([5,5,6,7,7])
data = pd.DataFrame({'id':id1,'value':value})
datag = data.groupby('id')
# to delete rows,that id have different values
datadel = []
for i in set(data.id):
if len(set(datag.get_group(i)['value'])) != 1:
datadel.extend(data.loc[data["id"] == i].index.tolist())

data.drop(datadel, inplace = True) 
print(data)

相关内容

最新更新