![](/img/trans.png)
[英]python pandas selecting columns from a dataframe via a list of column names
[英]Selecting the top 50 % percentage names from the columns of a pandas dataframe
我有一個像這樣的熊貓數據框。 行和列具有相同的名稱。
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%,那么熊貓中是否內置了任何東西?必須為其編寫一個函數,如何獲得它們? 我是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%,但頭和尾僅期望int。 df.head(frac = .5)失敗並出現TypeError:head()得到了意外的關鍵字參數'frac'
注意:關於int()vs round()
int(3.X) == 3 # True Where 0 >= X >=9
round(3.45) == 3 # True
round(3.5) == 4 # True
因此,在執行.head(int / round ...)時,請考慮一下適合您需要的行為。
更新:要求
因此,讓我們考慮a列,它具有10、5,-,6、8、3和4之類的值。我必須將它們全部加起來並獲得前50%的值。 因此,在這種情況下,總數為36。這些值的50%為18。因此,從a列中,我只想選擇10和8。 同樣,我想瀏覽所有其他列並選擇50%。 -馬特
一個愚蠢的辦法是進行排序,查找累積和,將其除以總和來找到中間值,然后使用它來選擇已排序列的一部分。 例如
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)
您可以對數據框進行排序,僅顯示90%的數據
df.sort_values('column_name',ascending=False).head(round(0.9*len(df)))
data.csv
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
test.py
#!/bin/python
import pandas as pd
def percentageOfList(l, p):
return l[0:int(len(l) * p)]
df = pd.read_csv('data.csv')
print(percentageOfList(df.sort_values('b', ascending=False)['b'], 0.9))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.