我有一個名為 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 的獨(dú)特組合的“價值”總和。因此,當(dāng) p2=1 和 p4=1 時(每組 p1、p2、p3、p4 中總是恰好有兩個 1),在這種情況下,它們的“值”列的總和將為 7。這很容易找到df[(df.p2 == 1) & (df.p4 == 1)].value.sum()。但是,我不知道如何為我的DataFrame df 執(zhí)行此操作,因為它有多大。它不是 p1-p4,而是由 p1-p89 組成。我最初的想法是創(chuàng)建一個新列,其中包含我要過濾的 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 個值的標(biāo)識符,所以我可以根據(jù)該行進(jìn)行排序。然而,這需要相當(dāng)長的時間。我估計這個 for 循環(huán)將需要大約 40 分鐘才能完成。這不是令人難以忍受的長——當(dāng)我完成提交這個問題時,它可能會接近完成。但是為了學(xué)習(xí),我不禁認(rèn)為必須有更有效的方法來完成這一點(diǎn)。那么,有嗎?有沒有辦法讓我在不需要創(chuàng)建新的標(biāo)識符列的情況下做到這一點(diǎn)?如果重要的話,我的最終目標(biāo)是創(chuàng)建一個新的 DataFrame,其中行數(shù)是 p1-p89 的唯一組合數(shù)。新 DataFrame 中的 'value' 列將是前一個 DataFrame 中該組合的所有實例的 'value' 列的總和,并且每個唯一組合都會有一個新的 find 'value' 列的總和p1-p89。
1 回答

躍然一笑
TA貢獻(xiàn)1826條經(jīng)驗 獲得超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()
添加回答
舉報
0/150
提交
取消