Python 3.x 将列中的所有重复值作为列中的单个值

Python 3.x 将列中的所有重复值作为列中的单个值,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我当前的数据帧是: Name term Grade 0 A 1 35 1 A 2 40 2 B 1 50 3 B 2 45 我想获得一个数据帧,如下所示: Name term Grade 0 A 1 35 2 40 1 B 1

我当前的数据帧是:

     Name   term    Grade
  0    A      1       35
  1    A      2       40
  2    B      1       50
  3    B      2       45
我想获得一个数据帧,如下所示:

     Name   term    Grade
  0   A      1        35
             2        40
  1   B      1        50
             2        45
我是否有可能获得预期的输出?如果有,我该如何做?

用于布尔掩码:

在已更改的
数据帧中可以看到掩码之间的差异:

print (df)
  Name  term  Grade
0    A     1     35
1    A     2     40
2    B     1     50
3    B     2     45
4    A     4     43
5    A     3     46
如果多个相同的连续组(如2
A
组)需要一般解决方案:

mask = df['Name'].ne(df['Name'].shift()).cumsum().duplicated()
df['Name'] = np.where(mask, '', df['Name'])
print (df)
  Name  term  Grade
0    A     1     35
1          2     40
2    B     1     50
3          2     45
4    A     4     43
5          3     46


我只是好奇。。。您选择这里的mask/np.where方法而不是类似以下内容的任何原因:
df.loc[df.Name.duplicated(),'Name']='
mask = df['Name'].ne(df['Name'].shift()).cumsum().duplicated()
df['Name'] = np.where(mask, '', df['Name'])
print (df)
  Name  term  Grade
0    A     1     35
1          2     40
2    B     1     50
3          2     45
4    A     4     43
5          3     46
mask = df['Name'].duplicated()
df['Name'] = np.where(mask, '', df['Name'])
print (df)
  Name  term  Grade
0    A     1     35
1          2     40
2    B     1     50
3          2     45
4          4     43
5          3     46