基于 3-4 列的每一行有多独特?

问题描述

我将很快按 3 列合并两个数据集。 希望原始数据集中没有/很少有 3 个列组重复。我想制作一些东西,大致说明每一行的独特性。可能是某种频率图(可能不起作用,因为我有一个非常大的数据集),可能是一个显示每 50 万行的平均频率的表格或类似的东西。

有没有办法确定每一行与其他行相比的唯一性?

1   2   3
A   100 B
A   200 B
A   200 B

对于上面的数据框,我想说每一行都是唯一的

1    2    3
A    200  B
A    200  B
A    100  B

对于这个数据集,第 1 行和第 2 行不是唯一的。我不想删除一个,但我希望量化/加权非唯一行的数量

问题是我的数据框有 14,000,000 行长,所以我需要想一种方法显示每行在如此大的集合中的独特性。

解决方法

假设您使用的是熊猫,这是一种可能的方法:

import pandas as pd

# Setup,which you can probably skip since you already have the data.
cols = ["1","2","3"]
rows = [
        ["A",200,"B",],["A",100,]

df1 = pd.DataFrame(rows,columns=cols)

# Get focus column values before adding a new column.
key_columns = df1.columns.values.tolist()

# Add a line column
df1["line"] = 1

# Set new column to cumulative sum of line values.
df1["match_count"] = df1.groupby(key_columns )['line'].apply(lambda x: x.cumsum())

# Drop line column.
df1.drop("line",axis=1,inplace=True)

打印结果

打印(df1)

输出 -

   1    2  3  match_count
0  A  200  B            1
1  A  200  B            2
2  A  100  B            1

只返回唯一的行:

# We only want results where the count is less than 2,# because we have our key columns saved,we can just return those
# and not worry about 'match_count'
df_unique = df1.loc[df1["match_count"] < 2,key_columns]

print(df_unique)

输出 -

   1    2  3
0  A  200  B
2  A  100  B