Python 根据其他列的唯一组合更改dataframe列值

Python 根据其他列的唯一组合更改dataframe列值,python,pandas,Python,Pandas,我有以下数据框: df=pd.DataFrame([[1,11,'a'],[2,12,'b'],[1,11,'c'],[3,12,'d'],[3,7,'e'], [2,12,'f']]) df.columns=['id','code','name'] print(df) id code name 0 1 11 a 1 2 12 b 2 1 11 c 3 3 12 d 4 3

我有以下数据框:

 df=pd.DataFrame([[1,11,'a'],[2,12,'b'],[1,11,'c'],[3,12,'d'],[3,7,'e'],
    [2,12,'f']])
 df.columns=['id','code','name']

 print(df)


     id  code name
  0   1    11    a
  1   2    12    b
  2   1    11    c
  3   3    12    d
  4   3     7    e
  5   2    12    f
对于上面的数据帧,对于列
id
code
的任何唯一组合,我只希望列'name'有一个值。对于eq,第0行和第2行的
名称应相同。此外,第1行和第5行的
名称也应相同

       id  code name
   0   1    11    a
   1   2    12    b
   2   1    11    a
   3   3    12    d
   4   3     7    e
   5   2    12    b
请让我知道如何通过编程实现这一点。我有两个人在100000多行上做这个手术


谢谢

让我们先使用
groupby
transform
、和
first

df.assign(name=df.groupby(['id','code'])['name'].transform('first'))
输出:

   id  code name
0   1    11    a
1   2    12    b
2   1    11    a
3   3    12    d
4   3     7    e
5   2    12    b

或者您不需要
groupby

A=df.sort_values(['id','code','name']).drop_duplicates(['id','code'],keep='first').index
df.loc[~df.index.isin(A),'name']=np.nan
df.sort_values(['id','code','name']).ffill().sort_index()


Out[603]: 
   id  code name
0   1    11    a
1   2    12    b
2   1    11    a
3   3    12    d
4   3     7    e
5   2    12    b

这是使用
join
drop\u duplicates
解决问题的另一种方法。然而,我更喜欢@ScottBoston的解决方案

cols = ['id', 'code']
df.drop('name', 1).join(df.drop_duplicates(cols).set_index(cols), on=cols)

   id  code name
0   1    11    a
1   2    12    b
2   1    11    a
3   3    12    d
4   3     7    e
5   2    12    b

是的,你领先了10秒:)很好地使用了
groupby
transform
@VenkateshMalhotra,这样编程比我的答案更好。这是一个更像python解决问题的方法的答案,祝你好运。回答得好,文+1这也是非常创新的。非常感谢。