pandas数据框删除每个数字的第一行

时间:2017-12-14 07:30:31

标签: python pandas dataframe

所以,基本上我有一个数据框,第一列看起来像这样:

#1
#2 
#2
#3
#3
#3
#3
#4
#4
#5

如您所见,第一列由随机重复的数字组成。

首先,我必须删除所有'#'然后我必须删除每个数字的第一行。因为,#1只有一行,它应该消失,只有#2的第二行保持,,,依此类推。

2 个答案:

答案 0 :(得分:2)

duplicatedboolean 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