【发布时间】:2020-01-15 20:19:30
【问题描述】:
我有一个包含三列的 DataFrame:单位、影响者和价值。有几种不同类型的影响者,这些值代表单位的数量。 我想创建一个新表,显示每个影响者的最频繁和最不频繁的 n 个单位及其各自的值。
我的 df 看起来像这样:
Unit Influencer Value
A foo 321
B foo 200
C foo 20
D foo 12
E foo 3
A bar 999
B bar 209
C bar 89
D bar 34
E bar 15
F bar 2
我的输出应该是这样的(假设我们想要顶部和底部 2 个单位):
Unit Influencer Value
A foo 321
B foo 200
D foo 12
E foo 3
A bar 999
B bar 209
E bar 15
F bar 2
我尝试了类似于找到here 的解决方案,但我收到错误“索引包含重复条目,无法重塑”,我认为这是因为“影响者”是我的 df 的索引。如果我的 df 是多索引,则创建新的 df,但它不正确。
def get_top3(counts, col1, col2):
top3 = (counts.groupby(col1))[col2].apply(lambda x: x.nlargest(3)).reset_index(level=1, drop=True).to_frame('VAL')
top3 = counts.set_index(np.arange(len(counts)) % 3, append=True)['value'].unstack().add_prefix('VAL')
return top3
但是,这会创建一个如下所示的 Dataframe:
VAL1 VAL2 VAL3
321 NaN NaN
NaN 200 NaN
NaN NaN 20
12 NaN NaN
NaN 3 NaN
...
任何建议将不胜感激!我也愿意就如何格式化我的输出 df 提供反馈。谢谢!
【问题讨论】:
-
输出中缺少“A”,有什么具体原因吗?
-
抱歉,我不得不移动我的一些值并忘记更改输出以反映这一点。我已经编辑了这个问题来解决这个问题。谢谢!