我已经用id、app和客户输入了下面的dataframe
输入数据规则
+--------------------+-----+---------+
| id|app |customer |
+--------------------+-----+---------+
|id1 | fw| WM |
|id1 | fw| CS |
|id2 | fw| CS |
|id1 | fe| WM |
|id3 | bc| TR |
|id3 | bc| WM |
+--------------------+-----+---------+
预期产出
使用pivot和groggrege-make app值作为列名,并将聚合的客户名作为数据表中的列表
+--------------------+----------+-------+----------+
| id| bc | fe| fw |
+--------------------+----------+-------+----------+
|id1 | 0 | WM| [WM,CS]|
|id2 | 0 | 0| [CS] |
|id3 | [TR,WM] | 0| 0 |
+--------------------+----------+-------+----------+
val newDF=df.groupby(“id”).pivot(“app”).agg(expr(“coalesce(first(customer),0)”)).drop(“app”).show()
+--------------------+-----+-------+------+
| id|bc | fe| fw|
+--------------------+-----+-------+------+
|id1 | 0 | WM| WM|
|id2 | 0 | 0| CS|
|id3 | TR | 0| 0|
+--------------------+-----+-------+------+
问题:在我的查询中,我不能在“fw”下为“id1”获得像[WM,cs]这样的客户列表(如预期输出所示),只有“WM”出现。类似地,对于“ID3”,只有“TR”出现--相反,对于“ID3”,应该在“BC”下出现一个带有[TR,wm]值的列表
需要你的建议,以获得每个应用程序下的客户名单。
如果您可以在应该为零的单元格中忍受一个空列表,则可以使用collect_list
:
df.groupBy("id").pivot("app").agg(collect_list("customer")).show
+---+--------+----+--------+
| id| bc| fe| fw|
+---+--------+----+--------+
|id3|[TR, WM]| []| []|
|id1| []|[WM]|[CS, WM]|
|id2| []| []| [CS]|
+---+--------+----+--------+
我有一张这样的桌子 基于以上数据,我需要得到这样一个表 我不知道如何使用一些PIVOT来实现这一点
我对Python和熊猫相当陌生,有一个问题我不太确定如何解决。我有一个熊猫DataFrame,其中包含在同一年为多支球队效力的曲棍球运动员: 我希望能够合并包含同一年的同一名球员的行,并按球员为其效力最多的球队排列列。在上面的例子中,B队的所有数字都是第一位的,因为球员A为B队打了最多的比赛,其次是A队,然后是C队。如果一名球员没有为多个队打过球或少于三个队打过球,我希望在给定的列中填写NA。 例
我试图理解MP4视频如何在在线流媒体中通过RTP进行分割(它是用H.264编解码器编码的)。有一些工具,比如FFMPEG或MP4box,或者我们可以使用ISO格式本身[moov,moof和mdat对]进行流媒体传输。我想知道的是,这些工具将如何分割视频中的mdat部分?他们会将MP4视频的所有单元(一组视频和音频帧)分离,并将它们与相关moov部分合并成一个片段,还是以其他方式进行? 还是使用H2
问题内容: 我正在尝试编写查询以创建数据的“表”,如下所示: 这将返回类似: 现在,我希望结果是这样的(来自MySQL查询,而不是由应用程序操纵): 有两个注意事项: 日期范围可以增加或缩小(取决于查询) 在某些情况下,PercentChange可能为null(假设category_7 / 2011-05-12可能没有设置值) 所以最终我不太确定如何构建查询的选择部分以反映动态的列数(我知道它与C
我最近开始学习PySpark的大数据分析。我有以下问题,并试图找到一个更好的方法来实现这一点。我会带你解决下面的问题。 给定下面的pyspark数据框: 我想按列进行分组——Col1、Col2、Col3,并在每个组中按日期时间降序排序 然后,从每个排序的组中选出最上面的一行(即DateTime中最新的一行) 最后,透视Col3值并使用“值” 我该如何以一种有效的方式,以较小的步骤实现这一目标?提前
我正在处理一些数据,并希望将某个列的最大值按不同的列分组。但是,我想根据另一列从最大计算中排除某些行。 示例: 我想得到Col3的最大值,按Col1分组,同时排除Col2中包含“Other”的任何行。因此,“A”的Col3的最大值应该是5,而不是17。 我能够使用:但是,对于a,这将给我一个17的值。 通过查看其他线程,我尝试使用: 这似乎让我接近了(它将数据按Col1分组,并根据Col2删除了行