我想基于两列中的值从数据框中删除重复的行:Column1
和Column2
如果dataframe
是:
df = pd.DataFrame({'Column1': ["'cat'", "'toy'", "'cat'"],
'Column2': ["'bat'", "'flower'", "'bat'"],
'Column3': ["'xyz'", "'abc'", "'lmn'"]})
使用时:
result_df = df.drop_duplicates(subset=['Column1', 'Column2'], keep='first')
print(result_df)
我得到:
Column1 Column2 Column3
0 'cat' 'bat' 'xyz'
1 'toy' 'flower' 'abc'
但是对dataframe
使用相同的代码(Cat和Bat大小写已更改)
df = pd.DataFrame({'Column1': ["'Cat'", "'toy'", "'cat'"],
'Column2': ["'Bat'", "'flower'", "'bat'"],
'Column3': ["'xyz'", "'abc'", "'lmn'"]})
我得到:
Column1 Column2 Column3
0 'Cat' 'Bat' 'xyz'
1 'toy' 'flower' 'abc'
2 'cat' 'bat' 'lmn'
预期输出:
Column1 Column2 Column3
0 'cat' 'bat' 'xyz'
1 'toy' 'flower' 'abc'
如何不区分大小写地进行比较?
答案 0 :(得分:1)
您可以将数据框转换为小写,然后应用解决方案。
您的数据框。
df = pd.DataFrame({'Column1': ["'Cat'", "'toy'", "'cat'"],
'Column2': ["'Bat'", "'flower'", "'bat'"],
'Column3': ["'xyz'", "'abc'", "'lmn'"]})
print(df)
Column1 Column2 Column3
0 'Cat' 'Bat' 'xyz'
1 'toy' 'flower' 'abc'
2 'cat' 'bat' 'lmn'
然后应用小写的字符串。
result_df = df.apply(lambda x: x.astype(str).str.lower()).drop_duplicates(subset=['Column1', 'Column2'], keep='first')
print(result_df)
Column1 Column2 Column3
0 'cat' 'bat' 'xyz'
1 'toy' 'flower' 'abc'
然后使用大写过滤器df。
df.loc[result_df.index]
Column1 Column2 Column3
0 'Cat' 'Bat' 'xyz'
1 'toy' 'flower' 'abc'
答案 1 :(得分:1)
首先,使用以下行将所有字符串值转换为小写以使其不区分大小写:
df[['Column1', 'Column2']] = df[['Column1', 'Column2']].applymap(lambda x: x.lower())
您将获得如下输出。
Column1 Column2 Column3
0 'cat' 'bat' 'xyz'
1 'toy' 'flower' 'abc'
2 'cat' 'bat' 'lmn'
现在应用放置重复项功能。
result_df = df.drop_duplicates(subset=['Column1', 'Column2'], keep='first')
print(result_df)
Column1 Column2 Column3
0 'cat' 'bat' 'xyz'
1 'toy' 'flower' 'abc'
参考:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.applymap.html
答案 2 :(得分:0)
我发现了...创建一个新的大写列,并使用它们删除重复项,然后删除这些列。
df = pd.DataFrame({'Column1': ["'Cat'", "'toy'", "'cat'"],
'Column2': ["'Bat'", "'flower'", "'bat'"],
'Column3': ["'xyz'", "'abc'", "'lmn'"]})
df['Column1_Upper'] = df['Column1'].astype(str).str.upper()
df['Column2_Upper'] = df['Column2'].astype(str).str.upper()
result_df = df.drop_duplicates(subset=['Column1_Upper', 'Column2_Upper'], keep='first')
result_df.drop(['Column1_Upper', 'Column2_Upper'], axis=1, inplace=True)
print(result_df)
这给出了:
Column1 Column2 Column3
0 'Cat' 'Bat' 'xyz'
1 'toy' 'flower' 'abc'