将重复值作为新数据框中列的名称,并将行作为另一列中的相应值
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|
+----+
为了解释我的意思,让我们用下面的例子:
------------------------
|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|
+----+