所以,基本上我有一个数据框,第一列看起来像这样:
#1
#2
#2
#3
#3
#3
#3
#4
#4
#5
如您所见,第一列由随机重复的数字组成。
首先,我必须删除所有'#'然后我必须删除每个数字的第一行。因为,#1只有一行,它应该消失,只有#2的第二行保持,,,依此类推。
答案 0 :(得分:2)
将duplicated
与boolean indexing
一起使用,上次移除#
按位置str[1:]
或str.strip
:
print (df)
a
0 #1
1 #2
2 #2
3 #3
4 #3
5 #3
6 #3
7 #4
8 #4
9 #5
df = df.loc[df['a'].duplicated(), 'a'].str[1:]
print (df)
2 2
4 3
5 3
6 3
8 4
Name: a, dtype: object
或者:
df = df.loc[df['a'].duplicated(), 'a'].str.strip('#')
print (df)
2 2
4 3
5 3
6 3
8 4
Name: a, dtype: object
详情:
print (df['a'].duplicated())
0 False
1 False
2 True
3 False
4 True
5 True
6 True
7 False
8 True
9 False
Name: a, dtype: bool
编辑:
df = df[df['a'].duplicated()]
df['a'] = df['a'].str.strip('#')
答案 1 :(得分:2)
假设您有一个包含两列名为df
设置
col1 = """#1
#2
#2
#3
#3
#3
#3
#4
#4
#5""".splitlines()
df = pd.DataFrame(dict(col1=col1, col2=3.14))
df
col1 col2
0 #1 3.14
1 #2 3.14
2 #2 3.14
3 #3 3.14
4 #3 3.14
5 #3 3.14
6 #3 3.14
7 #4 3.14
8 #4 3.14
9 #5 3.14
<强>解决方案强>
我们可以使用Numpy的unique
函数,return_index
设置为True
。这样做是返回每个唯一值的第一个实例的位置。然后我们使用它来识别索引值并删除它们。
_, i = np.unique(df.col1.values, return_index=True)
df.drop(df.index[i]).assign(col1=lambda d: d.col1.str[1:])
col1 col2
2 2 3.14
4 3 3.14
5 3 3.14
6 3 3.14
8 4 3.14