亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如何獲得由 pandas 數據框中的值表示的兩個串聯代碼的聚合百分比

如何獲得由 pandas 數據框中的值表示的兩個串聯代碼的聚合百分比

月關寶盒 2023-06-27 17:58:06
我是 python 新手,并試圖了解數據操作dfAlpha               AlphaComboCount12-99                   803922-99                   179212-99,138-99            177612-45,138-45            158521-99                   1225123-99                  1145121-99                  110221-581                  1000121-99,22-99             90932-99                    81421-141                   7512-581,12-99             711347-99                   6852089-281                 685123-49,121-29,22-79      626121-99,123-99,22-99      4正如您在上面看到的,有兩列。Alpha 是由 2 個以“-”分隔的代碼串聯而成的字符串。我的目標是找到第一個代碼的 alphacombocount 的總百分比。例如:其中有 21 個子代碼-Alpha   AlphaComboCount  Percent21-99   1225             53%21-141    75             3.2%21-581  1000            43.3%正如您在上面看到的,目標是獲得相應的百分比。因為這里的總聚合是 21 個子碼中的 2300 個。組合代碼變得更復雜:   123-49,121-29,22-79       626  99%    121-99,123-99,22-99      4   0.6%正如您在上面看到的,所有第一個子代碼都是相同的,但重新排列了。這也是獲取百分比值的有效情況。只要組合與“-”之前的第一個子碼相同即可。我怎樣才能得到所有 alpha 組合的百分比值?有這方面的算法嗎?
查看完整描述

2 回答

?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

首先,您想要分離單元格內的代碼,然后您可以提取第一個代碼和groupby:


# separate the codes

tmp = df.assign(FirstCode=df.Alpha.str.split(','))


# extract the first code

tmp['FirstCode'] = [tuple(sorted(set(x.split('-')[0] for x in cell)))

                        for cell in tmp.FirstCode]


# sum per each first codes with groupby

sum_per_code = tmp['AlphaComboCount'].groupby(tmp['FirstCode']).transform('sum')


# percentage is just a simple division

tmp['Percent'] = tmp['AlphaComboCount']/sum_per_code


# let's print the output:

print(tmp.sort_values('FirstCode'))

輸出:


                  Alpha  AlphaComboCount       FirstCode   Percent

0                 12-99             8039           (12,)  0.918743

11         12-581,12-99              711           (12,)  0.081257

2          12-99,138-99             1776       (12, 138)  0.528414

3          12-45,138-45             1585       (12, 138)  0.471586

6                121-99             1102          (121,)  1.000000

14  123-49,121-29,22-79              626  (121, 123, 22)  0.993651

15  121-99,123-99,22-99                4  (121, 123, 22)  0.006349

8          121-99,22-99              909       (121, 22)  1.000000

5                123-99             1145          (123,)  1.000000

13             2089-281              685         (2089,)  1.000000

4                 21-99             1225           (21,)  0.532609

7                21-581             1000           (21,)  0.434783

10               21-141               75           (21,)  0.032609

1                 22-99             1792           (22,)  1.000000

9                 32-99              814           (32,)  1.000000

12               347-99              685          (347,)  1.000000


查看完整回答
反對 回復 2023-06-27
?
森林海

TA貢獻2011條經驗 獲得超2個贊

如果Alpha列中有多個代碼,順序不同,那么可能的解決方案之一是提取其中之一(例如最?。?,然后取出“-”之前的部分,將其保存在新列中并在進一步中使用加工:


df['Alpha_1'] = df.Alpha.str.split(',')\

    .apply(lambda lst: min(lst)).str.split('-', expand=True)[0]

結果是:


                  Alpha  AlphaComboCount Alpha_1

0                 12-99             8039      12

1                 22-99             1792      22

2          12-99,138-99             1776      12

3          12-45,138-45             1585      12

4                 21-99             1225      21

5                123-99             1145     123

6                121-99             1102     121

7                21-581             1000      21

8          121-99,22-99              909     121

9                 32-99              814      32

10               21-141               75      21

11         12-581,12-99              711      12

12               347-99              685     347

13             2089-281              685    2089

14  123-49,121-29,22-79              626     121

15  121-99,123-99,22-99                4     121

要計算每個組中AlphaComboCount的百分比(具有特定值Alpha_1),請定義以下函數:


def proc(grp):

    return (grp.AlphaComboCount / grp.AlphaComboCount.sum()

        * 100).apply('{0:.2f}%'.format)

按Alpha_1對df進行分組并應用此函數,將結果保存在Grp_pct列中:


df['Grp_pct'] = df.groupby('Alpha_1').apply(proc).reset_index(level=0, drop=True)

要輕松檢查結果,請將每組中的行放在一起,按以下方式打印df :


print(df.sort_values('Alpha_1'))

得到:


                  Alpha  AlphaComboCount Alpha_1  Grp_pct

0                 12-99             8039      12   66.38%

2          12-99,138-99             1776      12   14.66%

3          12-45,138-45             1585      12   13.09%

11         12-581,12-99              711      12    5.87%

6                121-99             1102     121   41.73%

8          121-99,22-99              909     121   34.42%

14  123-49,121-29,22-79              626     121   23.70%

15  121-99,123-99,22-99                4     121    0.15%

5                123-99             1145     123  100.00%

13             2089-281              685    2089  100.00%

4                 21-99             1225      21   53.26%

7                21-581             1000      21   43.48%

10               21-141               75      21    3.26%

1                 22-99             1792      22  100.00%

9                 32-99              814      32  100.00%

12               347-99              685     347  100.00%

現在,例如,將有關Alpha_1 == 21 的部分與子代碼21的預期結果進行比較。


查看完整回答
反對 回復 2023-06-27
  • 2 回答
  • 0 關注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號