亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python - 遍歷離散箱列表并選擇行

Python - 遍歷離散箱列表并選擇行

偶然的你 2022-06-22 19:02:25
我有一個columnA整數值介于 -3 和 89 之間的 DataFrame。我想選擇所有值在columnA離散的 10 個單元箱之間的行,例如-10 到 00 到 10 ...80 到 90我可以像這樣生成每個 bin 中的行數列表:pd.cut(DataFrame['columnA'], np.arange(-10, 100, 10), include_lowest=True, labels=False).value_counts().sort_index().to_list()產生這樣的列表:[505, 25000, 21, 393, 79232, 953000, 24121, 662, 50, 900]現在,如果我想檢查第一個 bin 中的所有行,我可以像這樣選擇它們:DataFrame.sort_values('columnA', ascending=True).iloc[0:505]如何編寫一個函數來選擇 bin N 中的所有行?
查看完整描述

2 回答

?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

這個怎么樣?我假設您的垃圾箱的形式為 [a, b[ (在下限關閉并在上限打開。


df = pd.DataFrame(map(lambda x: int(x), (np.random.uniform(-3,89,1000))), columns=['ColumnA'])


def bin_func(df, N, col='ColumnA', xmin=-10, xmax=100, Nbins=10): 

    df_sorted = df.sort_values(col, ascending=True) 

    bins = np.arange(xmin, xmax, Nbins)

    if N > Nbins-1:

        return(pd.DataFrame())

    return(df_sorted[(df_sorted[col] >= bins[N]) & (df_sorted[col]<bins[N+1])])


查看完整回答
反對 回復 2022-06-22
?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

使用DataFrame.groupby+ Series.cumsum:


def get_bin(n):

     return df.groupby(df.index.isin([505, 25000, 21, 393, 79232, 953000, 24121, 662, 50, 900]).cumsum()).get_group(n)

這會將您的數據框分為稱為 0,1,2,3,4,5 ... n 的組。您選擇使用groupby.get_group。


這是一個例子:


print(df)

   a  b  c  d

0  0  1  1  x

1  0  1  5  y

2  0  1  5  x

3  0  1  0  y

4  1  1  5  x

5  0  1  4  y

6  1  0  1  x

7  1  1  3  y

8  0  1  2  x

9  0  0  0  y

groups=df.index.isin([2,4,7,9]).cumsum()

print(groups)

#array([0, 0, 1, 1, 2, 2, 2, 3, 3, 4])

print(df.groupby(groups).get_group(0))

   a  b  c  d

0  0  1  1  x

1  0  1  5  y


查看完整回答
反對 回復 2022-06-22
  • 2 回答
  • 0 關注
  • 184 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號