我有一个包含重复值/索引列的数据框,我想按“名称”列对其进行分组,但不对其进行任何汇总。我看过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
答案 0 :(得分:2)
如果要将重复的值替换为空字符串,请使用Series.duplicated
和Series.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)]