举个例子,我现在有一个Dataframe,想要找出其中同时拥有两个课程的班级,然后替换其班级下所有同学的课程为"全能"
df = pd.DataFrame({'班级':['A','B','C','C','D','E','E'],
'姓名':['a','b','c','d','e','f','g'],
'课程':['数学','数学','语文','数学','数学','语文','数学']
})
预期结果是班级3和班级5的所有同学的课程都是'全能'
预期结果类似:
df = pd.DataFrame({'班级':['A','B','C','C','D','E','E'],
'姓名':['a','b','c','d','e','f','g'],
'课程':['数学','数学','全能','全能','数学','全能','全能']
})
new_df= df.groupby(['班级'])['课程'].agg('nunique').reset_index()
res = new_df.loc[new_df['课程'] == 2]['班级'].tolist()
new_df.loc[new_df['班级'].isin(res),'课程'] = '全能'
import pandas as pd
df = pd.DataFrame({'班级':['A','B','C','C','D','E','E'],
'姓名':['a','b','c','d','e','f','g'],
'课程':['数学','数学','语文','数学','数学','语文','数学']
})
print(df)
def f(series):
if len(set(df[df.班级==series['班级']]['课程'].tolist())) == 2:
return '全能'
else:
return series['课程']
df['课程'] = df.apply(f, axis = 1)
print(df)
import pandas as pd
df = pd.DataFrame({'班级':['A','B','C','C','D','E','E'],
'姓名':['a','b','c','d','e','f','g'],
'课程':['数学','数学','语文','数学','数学','语文','数学']
})
df.课程[df.班级.isin(['C','E'])]='全能'
print(df)
还有我想说,如果你groupby,怎么还会是你展现的结果呢?