如何在保留行数据的同时删除列中的重复值?

时间:2020-02-03 07:17:34

标签: python pandas dataframe multi-index

我有一个包含重复值/索引列的数据框,我想按“名称”列对其进行分组,但不对其进行任何汇总。我看过items.Where(x => x.ToDateString.AddDays(0) <= toDate) 函数,但是根据我搜索的内容,您被迫执行聚合。我也尝试过Dataframe.groupby(),然后再做Dataframe.set_index('Name'),但是由于某种原因它返回了Dataframe.sort_index(inplace = True),我觉得这很明显,但是我不太明白。

这是我的数据框:

Nonetype

这就是我想要的:

Name Data1 Data2
A    .1    1.1
A    .2    1.2
A    .3    1.3
B    .6    1.6
B    .7    1.7
B    .8    1.8
C    1.0   2.0
C    1.1   2.1
C    1.2   2.2

1 个答案:

答案 0 :(得分:2)

如果要将重复的值替换为空字符串,请使用Series.duplicatedSeries.mask

df['Name'] = df['Name'].mask(df['Name'].duplicated(), '')
print (df)
  Name  Data1  Data2
0    A    0.1    1.1
1         0.2    1.2
2         0.3    1.3
3    B    0.6    1.6
4         0.7    1.7
5         0.8    1.8
6    C    1.0    2.0
7         1.1    2.1
8         1.2    2.2

MultiIndex中,它也可以正常工作,但不能正常工作,但值仅在默认视图中显示,如果重复,则不会在第一级显示:

df1 = df.set_index(['Name','Data1'])
print (df1)
            Data2
Name Data1       
A    0.1      1.1
     0.2      1.2
     0.3      1.3
B    0.6      1.6
     0.7      1.7
     0.8      1.8
C    1.0      2.0
     1.1      2.1
     1.2      2.2

检查docs, In [21]:,没有遗漏的数据,仅移至MultiIndex

with pd.option_context('display.multi_sparse', False):
    print (df1)

            Data2
Name Data1       
A    0.1      1.1
A    0.2      1.2
A    0.3      1.3
B    0.6      1.6
B    0.7      1.7
B    0.8      1.8
C    1.0      2.0
C    1.1      2.1
C    1.2      2.2

或者将MultiIndex的值转换为列表:

print (df1.index.tolist())
[('A', 0.1), ('A', 0.2), ('A', 0.3), 
 ('B', 0.6), ('B', 0.7), ('B', 0.8), 
 ('C', 1.0), ('C', 1.1), ('C', 1.2)]