我当前的数据框是:
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
我有可能得到我预期的输出吗?如果是,我该怎么做?
最佳答案
使用duplicated
对于 bool 掩码 numpy.where
:
mask = df['Name'].duplicated()
#more general
#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
在更改的DataFrame
中可以看到掩码之间的差异:
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 = 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
关于python-3.x - 将列中的所有重复值作为 pandas 中的单个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52023452/