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

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

如何根據許多列中的值過濾 Pandas DataFrame?

如何根據許多列中的值過濾 Pandas DataFrame?

慕哥6287543 2022-10-05 17:53:42
我有一個名為 df 的 DataFrame,它有超過 40,000 行和 90 多列。這是它的外觀片段:p1 p2 p3 p4 value 0  1  0  1   51  0  1  0   41  1  0  0   60  1  0  1   2我希望能夠找到 p1、p2、p3、p4 的獨特組合的“價值”總和。因此,當 p2=1 和 p4=1 時(每組 p1、p2、p3、p4 中總是恰好有兩個 1),在這種情況下,它們的“值”列的總和將為 7。這很容易找到df[(df.p2 == 1) & (df.p4 == 1)].value.sum()。但是,我不知道如何為我的DataFrame df 執行此操作,因為它有多大。它不是 p1-p4,而是由 p1-p89 組成。我最初的想法是創建一個新列,其中包含我要過濾的 89 列的值:unique_list = []for n in range(0,df.shape[0]):    unique_list.append(str(df.values[n][1:90]))df['identifier'] = unique_list然后每一行都會有這 89 個值的標識符,所以我可以根據該行進行排序。然而,這需要相當長的時間。我估計這個 for 循環將需要大約 40 分鐘才能完成。這不是令人難以忍受的長——當我完成提交這個問題時,它可能會接近完成。但是為了學習,我不禁認為必須有更有效的方法來完成這一點。那么,有嗎?有沒有辦法讓我在不需要創建新的標識符列的情況下做到這一點?如果重要的話,我的最終目標是創建一個新的 DataFrame,其中行數是 p1-p89 的唯一組合數。新 DataFrame 中的 'value' 列將是前一個 DataFrame 中該組合的所有實例的 'value' 列的總和,并且每個唯一組合都會有一個新的 find 'value' 列的總和p1-p89。
查看完整描述

1 回答

?
躍然一笑

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

似乎您可以使用groupby.


# Get everything except the value column.

group_cols = [o for o in df.columns if o != 'value']


# Group into unique combinations, sum the value column.

unique_counts = df.groupby(group_cols).sum().reset_index()


查看完整回答
反對 回復 2022-10-05
  • 1 回答
  • 0 關注
  • 89 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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