gpt4 book ai didi

python - Pandas 新数据框显示每组的前 N ​​个值和后 N 个值

转载 作者:行者123 更新时间:2023-12-05 08:40:43 25 4
gpt4 key购买 nike

我有一个包含三列的 DataFrame:单位、影响者和值(value)。有几种不同类型的影响者,值代表单位的数量。 我想创建一个新表,显示每个影响者最频繁和最不频繁的 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 ,但我收到错误“索引包含重复条目,无法 reshape ”,我认为这是因为“影响者”是我的 df 的索引。如果我的 df 是 multiindex,则会创建新的 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 的反馈。谢谢!

最佳答案

你可以试试:

nlargest = df.groupby('Influencer')['Value'].nlargest(2).reset_index()['level_1'].values
nsmallest = df.groupby('Influencer')['Value'].nsmallest(2).reset_index()['level_1'].values

result = pd.concat([df.iloc[nlargest], df.iloc[nsmallest]]).sort_index()
print(result)

输出

   Unit Influencer  Value
0 A foo 321
1 B foo 200
3 D foo 12
4 E foo 3
5 A bar 999
6 B bar 209
9 E bar 15
10 F bar 2

关于python - Pandas 新数据框显示每组的前 N ​​个值和后 N 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54258130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com