将重复值作为新数据框中列的名称,并将行作为另一列中的相应值

Make a duplicate value as name of a column in new dataframe with rows as the corresponding values in an other column

为了解释我的意思,让我们用下面的例子:

------------------------
|A     |  B      |  C  |
------------------------
|JAVA  |    2    |  1  |
------------------------
|JAVA  |    40   |  22 |
------------------------
|JAVA  |    40   |  52 |
------------------------
|JAVA  |    22   |  7  |
------------------------
|PYT   |    7    |  99 |
------------------------
|C++   |    3    |  5  |
------------------------

目标是这样获得的:

|JAVA  |
--------
|2     |
--------
|40    |
--------
|40    |
--------
|22    |
--------

在文本中,我想将列中的重复值作为新数据框中列的名称,其值是旧数据框中另一列中同一行中的对应值,希望我解释一下出色地。 如果有人可以帮助使用 python,我将不胜感激。谢谢

您可以使用 DataFrame.iterrows()(这是一个生成器)读取每一行并将它们分成列。然后制作一个字典,它的 keys 是 A 列的值,它的 Values 是它们在 B 列上对应值的列表。

我想你需要这样的东西:

from collections import defaultdict
import pandas as pd

original_columns = {
    'A': ["JAVA", "JAVA", "JAVA", "JAVA", "PYT", "C++"],
    'B': ["2", "40", "40", "22", "7", "3"],
    'C': ["1", "22", "52", "7", "99", "5"]
}

original_data_frame = pd.DataFrame(original_columns, columns=["A", "B", "C"])
new_columns = defaultdict(list)
for index, each_row in original_data_frame.iterrows():
    a_row = each_row["A"]
    b_row = each_row["B"]
    c_row = each_row["C"]
    new_columns[a_row].append(b_row)

print(dict(new_columns))

一些功劳来自@waitingkuo, @carlos-mougan and this question

您可以过滤掉重复值的行,将列名改为A列中的值:

from pyspark.sql import functions as F, Window

df2 = (df.withColumn('count', F.count('A').over(Window.partitionBy('A')))
         .filter('count > 1')
         .select(F.col('B').alias(df.select('A').head()[0]))
      )

df2.show()
+----+
|JAVA|
+----+
|   2|
|  40|
|  40|
|  22|
+----+