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
如果多个相同的连续组(如2A
组)需要一般解决方案:
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