![](/img/trans.png)
[英]Python: Output all unique combinations with a constraint, to a 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.