【发布时间】:2017-07-24 18:40:30
【问题描述】:
我有什么
我有一个这样的熊猫框架:
df1 = pd.DataFrame({
'date': ['31-05-2017', '31-05-2017', '31-05-2017', '31-05-2017', '01-06-2017', '01-06-2017'],
'tag': ['A', 'B', 'B', 'B', 'A', 'A'],
'metric1': [0, 0, 0, 1, 1, 1],
'metric2': [0, 1, 1, 0, 1, 0]
})
df2 = pd.DataFrame({
'date': ['31-05-2017', '31-05-2017', '01-06-2017'],
'tag': ['A', 'B', 'A'],
'metric3': [25, 3, 7,]
})
我想要什么
1) 我想对date 和tag 的每个组合求和metric和metric_2
2) 计算1 在metric_2 中的条目百分比
3) 将分组的 df1 与 df2 合并,这样每个date和tag都有metric_3
date | tag | metric1_sum | metric2_sum | metric2_percentage| metric 3
-----------|-----|-------------|-------------|-------------------|---------
31-05-2017 | A | 0 | 0 | 0 | 25
31-05-2017 | B | 1 | 2 | 0.667 | 3
01-06-2017 | A | 1 | 0 | 0.5 | 7
尝试
(1) 分组和求和工作
>>> g = df1.groupby(['date', 'tag']).agg(sum)
>>> g
metric1 metric2
date tag
01-06-2017 A 2 1
31-05-2017 A 0 0
B 1 2
(2) 计算百分比有效,但将其添加为列无效
我使用posted here的方法来计算百分比。
>>> g2 = df1.groupby(['date', 'tag']).agg({'metric2': 'sum'})
>>> g2.groupby(level=0).apply(lambda x: x/float(x.sum()))
metric2
date tag
01-06-2017 A 1.0
31-05-2017 A 0.0
B 1.0
但是,我现在如何将这个分组的metric2 分配给我的组g 或我的df1 中的列metric2_percentage?
(3) 合并失败
与组合并显然不起作用:
>>> pd.merge(g, df2, how='left', on=['date', 'tag'])
KeyError: 'date'
然后如何将df1 减少到每组一行,以便我可以将其与df2 合并?
【问题讨论】:
-
你能解释一下计算百分比和合并之间的问题吗?这些是单独的问题吗?
标签: python pandas pandas-groupby