簡體   English   中英

列表中 pandas 列的可能組合

[英]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.

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