簡體   English   中英

從股票交易表創建摘要 - 當前代碼執行緩慢

[英]Creating summary from stock transactions table - current code execution SLOW

我有一個看起來像這樣的股票交易表......

帳號可能重復多次,該帳號也可能多次訂購同一產品。

+------------+------------+------------+--------+---------+--------------+
| SA_ACCOUNT | SA_TRDATE  | SA_TRVALUE | SA_QTY | SA_COST | SA_PRODUCT   |
+------------+------------+------------+--------+---------+--------------+
| CSU1       | 23/03/2017 | 21.01      | 1      | 30      | W100/18      |
| AAA1       | 12/07/2018 | 38.04      | 6      | 19.8    | GPLR03REC800 |
| BWR1       | 01/11/2018 | 0          | -1     | 0       | W562/20      |
| CNT1       | 01/11/2018 | -2.22      | -1     | -1.23   | RX613S/12    |
| GBH1       | 15/09/2017 | 0          | 1      | 0       | COR2         |
+------------+------------+------------+--------+---------+--------------+

我想 output 一個表,其中每個帳戶作為一行,所有產品作為一列 - 該客戶的總銷售額和客戶的總件數。

預期的 output(列數將比下面的示例多得多):

+---------+----------+------------+---------------+-----------------+--------------+----------------+-----------+
| Account | MISC_PCS | MISC_VALUE | RX613S/12_PCS | RX613S/12_VALUE | R623S/12_PCS | R623S/12_VALUE | SP377_PCS |
+---------+----------+------------+---------------+-----------------+--------------+----------------+-----------+
| AGT1    | 25       | 32.65      | 2             | 5.26            | 0            | 0              | 0         |
| AHB1    | 0        | 0          | 0             | 0               | 0            | 0              | 0         |
| AHB2    | 0        | 0          | 0             | 0               | 2            | 1.25           | 0         |
| AJB1    | 0        | 0          | 0             | 0               | 0            | 0              | 0         |
| AJE2    | 0        | 0          | 0             | 0               | 0            | 0              | 0         |
| AJT4    | 0        | 0          | 0             | 0               | 0            | 0              | 0         |
| AJW1    | 0        | 0          | 0             | 0               | 0            | 0              | 0         |
| AK11    | 0        | 0          | 0             | 0               | 0            | 0              | 0         |
| AKS1    | 0        | 0          | 0             | 0               | 0            | 0              | 0         |
+---------+----------+------------+---------------+-----------------+--------------+----------------+-----------+

我已經編寫了下面的代碼,但是它非常慢,盡管它無法使用(我有 300,000 行要迭代)

誰能提供更好的解決方案?

我的代碼:

acc=""
index_test = -1
test_df = pd.DataFrame()
#For every row in the dataframe, iterate through the list of genres and place a 1 into the corresponding column
for index, row in stock_tran_df.iterrows():
    if acc != row["SA_DACCNT"]:
        acc = row["SA_DACCNT"]
        print(acc)
        index_test += 1
        test_df.loc[index_test,"Account"] = acc
    try:
        test_df.loc[index_test,row["SA_PRODUCT"] + "_PCS"] = test_df.loc[index_test,row["SA_PRODUCT"] + "_PCS"]  + row["SA_QTY"]
        test_df.loc[index_test,row["SA_PRODUCT"] + "_VALUE"] = test_df.loc[index_test,row["SA_PRODUCT"] + "_VALUE"]  + row["SA_TRVALUE"]
    except:
        test_df.loc[index_test,row["SA_PRODUCT"] + "_PCS"] = row["SA_QTY"]
        test_df.loc[index_test,row["SA_PRODUCT"] + "_VALUE"] = row["SA_TRVALUE"]  


test_df.fillna(0,inplace=True)

看起來你正在尋找的是

pandas.pivot_table

function 參數aggfunc=np.sum

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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