gpt4 book ai didi

python - 从 Pandas 数据框的列中选择前 50% 百分比的名称

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

我有一个看起来像这样的 Pandas 数据框。行和列具有相同的名称。

name a  b  c  d  e  f  g 
a 10 5 4 8 5 6 4
b 5 10 6 5 4 3 3
c - 4 9 3 6 5 7
d 6 9 8 6 6 8 2
e 8 5 4 4 14 9 6
f 3 3 - 4 5 14 7
g 4 5 8 9 6 7 10

我可以通过传递 df['column_name'].nlargest(n=5) 获得最大值的 5 个数,但是如果我必须按降序返回最大值的 50%,那么 pandas 中是否有内置的东西我必须为它写一个函数,我怎样才能得到它们?我对 python 很陌生。请帮帮我。

更新:因此,让我们考虑一下 a 列,它具有 10、5、-、6、8、3 和 4 等值。我必须对所有这些值求和并获得其中的前 50%。所以在这种情况下总数是 36。这些值的 50% 将是 18。所以从 a 列中,我只想选择 10 和 8。同样,我想遍历所有其他列并选择 50%。

最佳答案

排序很灵活:)

df.sort_values('column_name',ascending=False).head(int(df.shape[0]*.5))

更新:frac 参数仅适用于 .sample(),不适用于 .head 或 .tail。 df.sample(frac=.5) 确实给出了 50%,但 head 和 tail 只期望 int。 df.head(frac=.5) 失败并出现 TypeError: head() got an unexpected keyword argument 'frac'

注意:关于 int() 与 round()

int(3.X) == 3 # True Where 0 >= X >=9 
round(3.45) == 3 # True
round(3.5) == 4 # True

因此,在执行 .head(int/round ...) 时,请务必考虑适合您需要的行为。

更新:要求

So let's take column a into consideration and it has values like 10, 5,-,6,8,3 and 4. I have to sum all of them up and get the top 50% of them. so the total, in this case, is 36. 50% of these values would be 18. So from column a, I want to select 10 and 8 only. Similarly, I want to go through all the other columns and select 50%. -Matt

一个愚蠢的 hack 是排序,找到累积总和,通过将它除以总和找到中间值,然后用它来选择你排序列的一部分。例如

import pandas as pd

data = pd.read_csv(
pd.compat.StringIO("""name a b c d e f g
a 10 5 4 8 5 6 4
b 5 10 6 5 4 3 3
c - 4 9 3 6 5 7
d 6 9 8 6 6 8 2
e 8 5 4 4 14 9 6
f 3 3 - 4 5 14 7
g 4 5 8 9 6 7 10"""),
sep=' ', index_col='name'
).dropna(axis=1).apply(
pd.to_numeric, errors='coerce', downcast='signed')

x = data[['a']].sort_values(by='a',ascending=False)[(data[['a']].sort_values(by='a',ascending=False).cumsum()
/data[['a']].sort_values(by='a',ascending=False).sum())<=.5].dropna()
print(x)

结果:enter image description here

关于python - 从 Pandas 数据框的列中选择前 50% 百分比的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53405458/

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