[英]Possible combinations of pandas columns from a list
我在 python 中有一個 pandas 數據框,具有以下結構:
日期 | 一種 | 乙 | C | 丁 | 乙 | F | G | H |
---|---|---|---|---|---|---|---|---|
2022-01-01 10:00:00 | 1個 | 3個 | 0 | 4個 | 1個 | 0 | 0 | 1個 |
2022-01-01 11:00:00 | 0 | 1個 | 1個 | 2個 | 0 | 2個 | 3個 | 5個 |
2022-01-01 12:00:00 | 0 | 2個 | 0 | 1個 | 0 | 1個 | 0 | 0 |
2022-01-01 13:00:00 | 0 | 0 | 2個 | 0 | 0 | 3個 | 1個 | 2個 |
2022-01-02 10:00:00 | 0 | 3個 | 0 | 1個 | 2個 | 4個 | 4個 | 1個 |
2022-01-02 11:00:00 | 0 | 0 | 6個 | 0 | 0 | 0 | 5個 | 0 |
2022-01-02 12:00:00 | 0 | 0 | 6個 | 0 | 2個 | 4個 | 5個 | 3個 |
2022-01-02 13:00:00 | 0 | 0 | 0 | 1個 | 3個 | 0 | 0 | 0 |
這是我的真實數據框的一個片段,它有很多“字母”列(超過 100 個)。 我的問題是我需要獲得每個日期時間的數字總和和不同組合的字母。
這在All possible combinations as new columns of a dataframe based on primary column 中得到了回答,但它計算了從 N 到 M 元素的所有可能組合。 對於 100 列的 df,從 1 個單字母列到完整組合 100 的所有可能組合都是瘋狂的,無法計算。
幸運的是,我只對某些組合感興趣(同樣,真實 df 中大約有 50 個),這些組合在列表中給出:
list_possibilities = ['A+B', 'A+B+D', 'B+D+E+G', 'F+H', 'D+E+F+G+H', 'D', ' F', 'G+H']
如您所見,也可以使用“D”或“F”等單列。 因此最終的 df 將相當緊湊,並且不需要對數千種組合進行強力計算(為簡單起見,此處僅顯示前兩行):
日期 | 甲+乙 | 甲+乙+乙 | B+D+E+G | 女+女 | D+E+F+G+H | 丁 | F | G+H |
---|---|---|---|---|---|---|---|---|
2022-01-01 10:00:00 | 4個 | 8個 | 8個 | 1個 | 6個 | 4個 | 0 | 1個 |
2022-01-01 11:00:00 | 1個 | 3個 | 6個 | 7 | 12 | 2個 | 2個 | 8個 |
了解組合的先驗結構可以成倍地減少熊貓必須做的組合和總和,但我無法將解決方案的先前代碼推廣到這種情況。 有任何想法嗎?
在字典理解中使用concat
:
out = (pd
.concat({cols: df.set_index('Date')[cols.split('+')].sum(axis=1)
for cols in list_possibilities}, axis=1)
.reset_index()
)
輸出:
Date A+B A+B+D B+D+E+G F+H D+E+F+G+H D F G+H
0 2022-01-01 10:00:00 4 8 8 1 6 4 0 1
1 2022-01-01 11:00:00 1 3 6 7 12 2 2 8
2 2022-01-01 12:00:00 2 3 3 1 2 1 1 0
3 2022-01-01 13:00:00 0 0 1 5 6 0 3 3
4 2022-01-02 10:00:00 3 4 10 5 12 1 4 5
5 2022-01-02 11:00:00 0 0 5 0 5 0 0 5
6 2022-01-02 12:00:00 0 0 7 7 14 0 4 8
7 2022-01-02 13:00:00 0 1 4 0 4 1 0 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.