Python 为什么使用.loc[]访问数据帧的列会产生重复的行?

Python 为什么使用.loc[]访问数据帧的列会产生重复的行?,python,pandas,csv,dataframe,duplicates,Python,Pandas,Csv,Dataframe,Duplicates,为什么.loc[]在我的数据帧中产生重复的行?我试图从m3(一个包含47列的数据框架)中选择几列,以创建一个名为output的新数据框架 问题是:在使用.loc[]访问m3的列之后,输出的重复项比m3开始时的多。这些复制品是从哪里来的?我在网上没有找到任何关于.loc[]复制行的信息。顺便说一下,输出数据帧在读取output=m3.loc[…]的行上声明 守则: print("ARE THERE DUPLICATES in m3? ") print(m3.duplicated().loc[lam

为什么
.loc[]
在我的数据帧中产生重复的行?我试图从m3(一个包含47列的数据框架)中选择几列,以创建一个名为output的新数据框架

问题是:在使用
.loc[]
访问m3的列之后,输出的重复项比m3开始时的多。这些复制品是从哪里来的?我在网上没有找到任何关于
.loc[]
复制行的信息。顺便说一下,输出数据帧在读取
output=m3.loc[…]
的行上声明

守则:

print("ARE THERE DUPLICATES in m3? ")
print(m3.duplicated().loc[lambda x: x==True])

output = m3.loc[:,["PLC_name", "line", "track", "notes", "final_source", 
"s_name", "s_line", "s_track", "loc", "alt_loc", "suffix", "alt_match_name"]]

print("ARE THERE DUPLICATES in output? ")
print(output.duplicated().loc[lambda x: x==True].size, "duplicates")
终端输出:

ARE THERE DUPLICATES in m3? 
5241    True
5242    True
5243    True
5355    True
5356    True
5357    True
dtype: bool
ARE THERE DUPLICATES in output? 
1838 duplicates

当然,我可以通过调用
.drop_duplicates(keep=“first”)
轻松解决问题,但我更感兴趣的是了解
.loc[]
为什么会显示这种行为

输出
m3
中的选定列过滤。在
m3
上调用
duplicated
时,将考虑原始数据帧中的所有列。在
output
上调用
duplicated
时,只考虑这些列的子集

因此,即使在
m3
中没有重复项,也可以在
输出中有重复项

下面是一个最小且可复制的示例,说明您所看到的内容:

df = pd.DataFrame([[3, 8, 9], [4, 8, 9]])
print(df.duplicated().sum(), 'duplicates')
# 0 duplicates

df_filtered = df.loc[:, [1, 2]]
print(df_filtered.duplicated().sum(), 'duplicates')
# 1 duplicates

谢谢@jpp!我看了整整一个小时,现在我有一个真正的“duh”时刻。就像为什么我没早点看到一样!无论如何,我也对你的答案投了赞成票,我想等我有了更高的声誉时,它就会显现出来。