2017-08-09 97 views
0

我有第一个事件,第二个事件和occaurence的数据框。它包括对采用以下格式:将元素对转换为火花中的矩阵

(e1,e2,10) 
(e1,e1,1) 
(e1,e3,12) 
(e2,e1,10) 
(e2,e2,50) 

然后,我想写具有以下格式的CSV文件:

e1 e2 e3 
e1 1 10 12 
e2 10 50 0 
e3 12 0 0 

回答

2

如果您有一个包含三个co的数据集lumns可以使用GROUPBY,支点和金额:

df.show 
+---+---+-----+ 
| c1| c2| c3| 
+---+---+-----+ 
| e1| e2| 10.0| 
| e1| e1| 1.0| 
| e1| e4| 12.0| 
| e1| e4|100.0| 
| e2| e1| 10.0| 
| e2| e2| 50.0| 
+---+---+-----+ 

df.groupBy("c1").pivot("c2").sum("c3").show 
+---+----+----+-----+               
| c1| e1| e2| e4| 
+---+----+----+-----+ 
| e2|10.0|50.0| null| 
| e1| 1.0|10.0|112.0| 
+---+----+----+-----+ 

请注意,我用的“总和”,所以如果你有同样的事件对多次出现的更多的将汇总。如果您需要其他行为,您可以使用任何其他汇总函数(avg,min,max ...)。

0

如果你的数据帧是这样的:

e1 | e2 | 10 
e1 | e1 | 1 
e1 | e4 | 12 
e1 | e4 | 100 
e2 | e1 | 10 
e2 | e2 | 50 

Give是列名,看起来像这样(c1/c2/c3是列名,你可以使这些任何你想要的)...

c1 | c2 | c3 
---|----|---- 
e1 | e2 | 10 
e1 | e1 | 1 
e1 | e4 | 12 
e1 | e4 | 100 
e2 | e1 | 10 
e2 | e2 | 50 

,并使用熊猫的数据帧pivot_table功能

沿(df是表名)行..

df = df.pivot_table(values = 'c3', index = 'c1', columns = 'c2') 

这在理论上将使它看起来像你期望的输出:

e1 e2 e3 
e1 1 10 12 
e2 10 50 0 
e3 12 0 0 

未测试