簡體   English   中英

Python Pandas:減少 DataFrame 到獨特的組合

[英]Python Pandas: Reduce DataFrame to Unique Combinations

我有一個數據集,其中列出了一些籃球運動員的姓名及其位置。 有了這些數據,我創建了一個 DataFrame,列出了所有可能的陣容組合。 這一切都很好。 我的問題是:由於某些球員有資格在多個位置上,DataFrame 包括具有相同球員集但在不同位置上列出的記錄。 這是 dataframe 的一個小例子:

PG SG 順豐 PF C G F 實用程序
盧卡·東契奇 小蒂姆哈達威 狄龍布魯克斯 凱爾登·約翰遜 澤維爾·蒂爾曼老 泰斯·瓊斯 德瑪爾·德羅贊 布拉德利比爾
泰斯·瓊斯 狄龍布魯克斯 小蒂姆哈達威 德瑪爾·德羅贊 澤維爾·蒂爾曼老 盧卡·東契奇 凱爾登·約翰遜 布拉德利比爾
泰斯·瓊斯 布拉德利比爾 凱爾登·約翰遜 德瑪爾·德羅贊 澤維爾·蒂爾曼老 小蒂姆哈達威 布蘭登克拉克 盧卡·東契奇
泰斯·瓊斯 小蒂姆哈達威 凱爾登·約翰遜 德瑪爾·德羅贊 布蘭登克拉克 布拉德利比爾 澤維爾·蒂爾曼老 盧卡·東契奇
盧卡·東契奇 小蒂姆哈達威 凱爾·安德森 凱爾登·約翰遜 喬納斯·瓦蘭丘納斯 泰斯·瓊斯 澤維爾·蒂爾曼老 布拉德利比爾
盧卡·東契奇 布拉德利比爾 凱爾登·約翰遜 凱爾·安德森 喬納斯·瓦蘭丘納斯 泰斯·瓊斯 澤維爾·蒂爾曼老 小蒂姆哈達威

如您所見,相同的球員在記錄 1 和記錄 2 中,但被列在不同的位置。 同樣,相同的玩家在 3 和 4 中。在 5 和 6 中相同。注意:這是一個簡化的示例; 同樣的球員有更多的陣容。 我需要每組獨特的玩家,無論 position 是否由一條記錄表示。 它是否顯示該玩家組合的第一個或最后一個記錄並不重要。 那么如何將上面的 dataframe 減少到下面的 dataframe 之類的東西呢? 一旦 dataframe 減少,我還需要重置索引。

PG SG 順豐 PF C G F 實用程序
盧卡·東契奇 小蒂姆哈達威 狄龍布魯克斯 凱爾登·約翰遜 澤維爾·蒂爾曼老 泰斯·瓊斯 德瑪爾·德羅贊 布拉德利比爾
泰斯·瓊斯 布拉德利比爾 凱爾登·約翰遜 德瑪爾·德羅贊 澤維爾·蒂爾曼老 小蒂姆哈達威 布蘭登克拉克 盧卡·東契奇
盧卡·東契奇 小蒂姆哈達威 凱爾·安德森 凱爾登·約翰遜 喬納斯·瓦蘭丘納斯 泰斯·瓊斯 澤維爾·蒂爾曼老 布拉德利比爾

非常感謝您!

您可以groupby行的一set表示進行分組,然后選擇第一個/最后一個:

In [16]: df = pd.DataFrame({'a': [1, 2, 3, 4, 5], 'b': [2, 1, 2, 5, 4], 'c': [3, 3, 1, 6, 6]})

In [17]: df
Out[17]:
   a  b  c
0  1  2  3
1  2  1  3
2  3  2  1
3  4  5  6
4  5  4  6

In [18]: df.groupby(df.apply(lambda x: tuple(set(x)), axis=1)).first()
Out[18]:
           a  b  c
(1, 2, 3)  1  2  3
(4, 5, 6)  4  5  6

In [19]: df.groupby(df.apply(lambda x: tuple(set(x)), axis=1)).last()
Out[19]:
           a  b  c
(1, 2, 3)  3  2  1
(4, 5, 6)  5  4  6

您還可以在末尾使用.reset_index(drop=True)清除該索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM