第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

數(shù)據(jù)框中的所有唯一列組合

數(shù)據(jù)框中的所有唯一列組合

瀟瀟雨雨 2022-11-18 16:47:35
我正在嘗試在 dataframe 中創(chuàng)建所有可能的唯一列組合。因此,具有 A、B、C 和 D 列,組合將是AB、AC、AD、BC、BD、ABC、ABD。A   B   C   D   AB   AC   AD ...1   1   3   2   2    4    3為此,我創(chuàng)建了一個 for 循環(huán):for i, comb in enumerate(df_p.columns):    for comb2 in df_p.columns[i:]:        if (comb != comb2) & (comb not in comb2)):            df_p[comb + ' + ' + comb2] = df_p[comb].astype('str') + ' + ' + df_p[comb2].astype("str")            print(" comb: " + comb + " combines with comb2: " + comb2)基本上,“comb”迭代器從第一列 (A) 開始,第二個迭代器“comb2”從第二列 (B) 開始,創(chuàng)建 AB,然后繼續(xù)直到創(chuàng)建所有 A 組合。然后,當 comb 到 B 時,comb2 從 C 開始,依此類推。if 條件阻止了 A + A 以及 A + BA 之類的事情(我在 df 中用更多的列測試它時遇到了一些錯誤)。我現(xiàn)在的問題是關于反向重復項,比如當?shù)饕晃挥谧帜?A 時創(chuàng)建“ABD”(并且迭代器二將它與所有列組合)以及當?shù)饕晃挥?D 時創(chuàng)建“DBA”而迭代器二完成所有操作組合。在我的研究中,我也嘗試過使用 itertools 組合,如下所示:set(itertools.combinations(df_p.columns, 2))對于 2 的組合,對于其他所有可能的組合,依此類推,但是后來我遇到了麻煩“映射”新創(chuàng)建的列組合(如 AB)與行值我原來的 df(對于這個例子,這將是 A 的行值 + B 的行值)。我更喜歡 itertools 選項,因為它可以更好地控制我們想要的組合數(shù)量,而且可能不難映射。有什么想法嗎?提前致謝。
查看完整描述

2 回答

?
動漫人物

TA貢獻1815條經(jīng)驗 獲得超10個贊

IIUC,combinationsreduceSeries.add

from itertools import combinations

from functools import reduce

cols = df.columns.copy()

for i in range(2, len(cols) + 1):

    for names in combinations(cols, i):

        df[''.join(names)] = reduce(lambda cum_serie, new_serie_name: \

                                    cum_serie.add(df[new_serie_name]),

                                    names[1:],

                                    df[names[0]])



print(df)

輸出


   A  B  C  D  AB  AC  AD  BC  BD  CD  ABC  ABD  ACD  BCD  ABCD

0  1  1  3  2   2   4   3   4   3   5    5    4    6    6     7

編輯


df = df.rename(columns=str).astype(str)

cols = df.columns.copy()

for i in range(2, len(cols) + 1):

    for names in combinations(cols, i):

        df[' + '.join(names)] = reduce(lambda cum_serie, new_serie_name: \

                                    cum_serie.str.cat(df[new_serie_name], ' + '),

                                    names[1:],

                                    df[names[0]])

print(df)


   A  B  C  D  A + B  A + C  A + D  B + C  B + D  C + D  A + B + C  A + B + D  \

0  1  1  3  2  1 + 1  1 + 3  1 + 2  1 + 3  1 + 2  3 + 2  1 + 1 + 3  1 + 1 + 2   


   A + C + D  B + C + D  A + B + C + D  

0  1 + 3 + 2  1 + 3 + 2  1 + 1 + 3 + 2  


查看完整回答
反對 回復 2022-11-18
?
暮色呼如

TA貢獻1853條經(jīng)驗 獲得超9個贊

我認為使用combinations是正確的方法。


首先創(chuàng)建列組合列表:


col_combs = list(combinations(df.columns, 2))


然后要獲取僅包含任何給定組合的那些列的 df,將組合元組轉換為列表,并將其傳遞給數(shù)據(jù)框。


cols = list(col_combs[0]

comb_df = `df[col_combs)]

下面是一個最小示例,說明如何為 2 列的每個組合存儲單獨的數(shù)據(jù)框:


col_combs = list(combinations(df.columns, 2))


comb_dfs = []


for cols in col_combs:

    temp = df[list(cols)].copy()

    comb_dfs.append(temp)

為了讓它適用于更多的列組合,您只需combinations使用您想要的值運行幾個不同的值,并在制作數(shù)據(jù)框之前將所有結果收集到一個列表中。


查看完整回答
反對 回復 2022-11-18
  • 2 回答
  • 0 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號