ash*_*her 3 python group-by pandas
我一直在广泛搜索,但无法解决这个问题:
我在 pandas 中有一个数据框,如下所示:
date ticker Name NoShares SharePrice Volume Relation
2/1/10 aaa zzz 1 1 1 d
2/1/10 aaa yyy 1 2 5 o
2/1/10 aaa zzz 2 5 2 d
2/5/10 bbb xxx 5 5 1 do
2/5/10 ccc www 5 5 1 d
2/5/10 ccc www 5 5 1 d
2/5/10 ddd vvv 5 5 1 o
2/6/10 aaa zzz 1 1 3 d
Run Code Online (Sandbox Code Playgroud)
要求
所以我的输出将如下所示:
date ticker Name NoShares SharePrice Volume Relation
2/1/10 aaa zzz 3 3.6 1 d
2/1/10 aaa yyy 1 2 5 o
2/5/10 bbb xxx 5 5 1 do
2/5/10 ccc www 10 5 1 d
2/5/10 ddd vvv 5 5 1 o
2/6/10 aaa zzz 1 1 3 d
Run Code Online (Sandbox Code Playgroud)
我尝试了有关堆栈溢出的文档和其他答案,但似乎无法正确解决。感谢您的帮助。干杯。
这是我的解决方案:
grpby = df.groupby(['date','Name'])
a = grpby.apply(lambda x: np.average(a = x['SharePrice'],weights=x['NoShares'])).to_frame(name='SharePrice')
b = grpby.agg({'NoShares':'sum','Volume':'mean','Relation':'max'})
print b.join(a)
Volume Relation NoShares SharePrice
date Name
2/1/10 yyy 5.0000 o 1 2.0000
zzz 1.5000 d 3 3.6667
2/5/10 vvv 1.0000 o 5 5.0000
www 1.0000 d 10 5.0000
xxx 1.0000 do 5 5.0000
2/6/10 zzz 3.0000 d 1 1.0000
Run Code Online (Sandbox Code Playgroud)
之后只需reset_index()即可。