我有一个数据框,其中包含有关一段时间内用户评分项目的信息。它具有以下相似之处:
在数据框中,我有许多行具有相同的“ user_id”和“ business_id”,我可以使用以下代码进行检索:
val rdd = sc.newAPIHadoopFile(avro_file, classOf[AvroKeyInputFormat[GenericRecord]],
classOf[AvroKey[GenericRecord]],
classOf[NullWritable]
我现在需要从原始数据框中删除所有这些重复项,并用它们的平均值代替。有没有一种快速而优雅的方法来实现这一目标?谢谢!
答案 0 :(得分:0)
如果您有一个数据框,则它看起来像
$DNSServer = "dnsservername"
$dnsrecord = Get-DnsServerResourceRecord -ComputerName $DNSServer -ZoneName 'db.local' -RRType CName | Where-Object {$_.RecordData.HostNameAlias -like "*" -and $_.HostName -like "*.*"}
$Datatable = New-Object System.Data.DataTable
[void]$Datatable.Columns.Add("CName")
[void]$Datatable.Columns.Add("HostNameAlias")
Foreach ($record in $dnsrecord)
{
[void]$Datatable.Rows.Add($record.HostName, $record.RecordData.HostNameAlias)
}
然后解决方案应该是这样的:
review_id user_id business_id stars date
0 1 0 3 2.0 2019-01-01
1 2 1 3 5.0 2019-11-11
2 3 0 2 4.0 2019-10-22
3 4 3 4 3.0 2019-09-13
4 5 3 4 1.0 2019-02-14
5 6 0 2 5.0 2019-03-17
具有以下结果:
df.loc[df.duplicated(['user_id', 'business_id'], keep=False)]\
.groupby(['user_id', 'business_id'])\
.apply(lambda x: x.stars - x.stars.mean())