【问题标题】:How unique is each row based on 3-4 columns?基于 3-4 列的每一行有多独特?
【发布时间】:2021-04-01 10:22:44
【问题描述】:

我将很快将两个数据集合并 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 行长,所以我需要想办法显示在这么大的集合中每一行的独特性。

【问题讨论】:

  • 您使用的是 pandas 还是只是 Python 的内置函数?
  • 14,000,000 是很多,但也许不会太多。我会尝试将所有这些推送到 collections.Counter 中,看看它的表现如何。
  • "show unique""show how unique" 是两个不同的东西,虽然第二个比第二个更难(记忆方面)首先。在您的示例中,您只展示了“相同”而不是“相似”。另外,您已经标记了pythonr,您是否在这里寻找任何一种语言?在那里有一些清晰/指导可能会有所帮助。
  • 任何一种语言。我的意思是相同的,我不在乎相似。当我合并两个数据集以添加第四列时,我希望第四列是完全唯一的(理想情况下)。如果它不是完全独特的,那很好,我不想删除列,但我正在为其他人准备一个估计。我标记了两种语言,因为我可以使用任何一种

标签: python r dataframe bigdata unique


【解决方案1】:

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

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", 200, "B",],
        ["A", 100, "B",],
        ]

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

【讨论】:

    猜你喜欢
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    相关资源
    最近更新 更多