我有一个看起来像这样的数据框:
import re
content = '''
[row1|col1]:{value:{{calculate}}<<report_1>>[Row2|col2];format:float;}
[hiddenr0120a|c0012]:{format:float;}
'''
r = re.compile(r'(\[.+?\]):(\{.*?;\})')
expected = [("[row1|col1]", "{value:{{calculate}}<<report_1>>[Row2|col2];format:float;}",),
("[hiddenr0120a|c0012]", "{format:float;}",),]
assert all(t == expected[i][j] for i, x in enumerate(r.findall(content)) for j, t in enumerate(x))
我需要聚合此数据框,在这里我将对“ road”和“ dirn”列进行分组,并对“ length”列求和,并从“ lanes”列中获得最常用的值。结果数据框应如下所示:
road dirn length lane
1 L 0 2
1 L 0.6 2
1 L 1.2 1
1 L 0.8 2
2 R 1.5 3
2 R 0.4 2
2 R 9 3
我可以使用groupby,agg和sum轻松地进行groupby和求和。我已经看到,最常见的值可以使用value_counts获得,但是我不确定如何将sum和value_counts结合使用。实际的数据帧非常大,我可能需要将总和和值计数应用于多个列。
有人可以帮助我了解以下内容: i)如何分组并获得“长度”和“车道”的最常用值 ii)如何将其扩展为groupby(多列),将多列求和,最常见的值(重命名列)
答案 0 :(得分:1)
将GroupBy.agg
与 var payloadData = Data([0x02,0x65,0x6E])
payloadData.append(self.record_to_write.data(using: .utf8)!)
let customTextPayload = NFCNDEFPayload.init(
format: .nfcWellKnown,
type: "T".data(using: .utf8)!,
identifier: Data(),
payload:payloadData
)
self.record_new_arr.append(customTextPayload)
let messge = NFCNDEFMessage.init(records: self.record_new_arr )
tag.writeNDEF(messge, completionHandler: { (error: Error?) in
if nil != error{
session.alertMessage = "Write NDEF message fail: \(error)"
print("Write NDEF message fail: \(error)")
}else{
print("Write NDEF message successfull.")
session.alertMessage = "Write NDEF message successfull."
}
})
一起使用,最常用的值是Series.mode
:
sum
与Series.value_counts
类似的想法:
df1 = (df.groupby(['road','dirn'], as_index=False)
.agg({'length':'sum','lane':lambda x: x.mode().iat[0]}))
df1 = (df.groupby(['road','dirn'], as_index=False)
.agg({'length':'sum','lane':lambda x: x.value_counts().index[0]}))
编辑:如果同时存在两个聚合函数的列名列表,则可以将GroupBy.agg
与由print (df1)
road dirn length lane
0 1 L 2.6 2
1 2 R 10.9 3
合并的字典一起使用:
**
答案 1 :(得分:0)
下面的代码将给出列length
的总和,并提供列mode
的{{1}}
lane
下面的代码将对列df.groupby(['road','dirn']).agg({'length':[np.sum],'lane':[pd.Series.mode]})
求和,并提供列length
的最大值
lane