簡體   English   中英

Python Pandas,轉換數據框

[英]Python Pandas, transform dataframe

我有以下數據框(sim_2005):

Date         ELEM1 ELEM2 ... ELEM1133
2005-01-01   0.021 2.455 ... 345.2
2005-01-02   0.321 2.331 ... 355.1
...          ...   ...   ... ...
2005-12-31   0.789 3.456 ... 459.9
[365 rows x 1133 columns]

我需要將其導入以下格式的(postgresql)數據庫中:

ID     Date        ELEM     Value
1      2005-01-01  ELEM1    0.021
2      2005-01-02  ELEM1    0.321
...
366    2005-01-01  ELEM2    2.455
367    2005-01-02  ELEM2    2.331
...
402983 2005-01-01  ELEM1133 345.2
402984 2005-01-02  ELEM1133 355.1
...
403348 2005-12-31  ELEM1133 459.9

我正在盡最大努力遍歷各列並逐步將其串聯起來,

for column in sim_2005:
    sim_concat = pd.concat([pd.DataFrame(sim_2005.columns.values), sim_2005.ix[:, column]], ignore_index=True)

到目前為止所產生的不是我想要的。

我也嘗試了pandas樞紐函數,groupby等...,但是我想我對pandas和python的理解通常不足以進行此轉換。 有什么幫助嗎?

編輯:

謝謝,pd.melt是答案!

 sim_2005_melted = pd.melt(sim_2005, id_vars=sim_2005.index.name, value_vars=list(sim_2005.columns.values), var_name='ELEM', value_name='Q_sim').sort(columns='Date')

結果是:

ID     Date   ELEM     Q_sim
1      NaN    ELEM1    0.021
2      NaN    ELEM1    0.321
...
366    NaN    ELEM2    2.455
367    NaN    ELEM2    2.331
...
402983 NaN    ELEM1133 345.2
402984 NaN    ELEM1133 355.1

由於某種原因,datetime索引沒有被傳輸,但是總體結構正是我想要的!

看起來您正在用pandas術語進行“從寬到窄”的轉換。 一種方法是melt

在這種情況下,您可以執行以下操作:

pd.melt(df, id_vars=['Date'], value_vars=['ELEM1', 'ELEM2']).sort(columns='Date')

對於具有兩個“寬”列['ELEM1', 'ELEM2'] 對於示例中的value_vars列,您顯然不會手工編寫它們,而是使用某種列表理解來創建value_vars


df = pd.DataFrame({
    'Date': range(4),
    'ELEM1': range(1, 5),
    'ELEM2': range(11, 15),
    'ELEM2': range(-5, -1)
})

>> df
    Date    ELEM1   ELEM2
0   0   1   -5
1   1   2   -4
2   2   3   -3
3   3   4   -2

>> pd.melt(df, id_vars=['Date'], value_vars=['ELEM1', 'ELEM2']).sort(columns='Date')
    Date    variable    value
0   0   ELEM1   1
4   0   ELEM2   -5
1   1   ELEM1   2
5   1   ELEM2   -4
2   2   ELEM1   3
6   2   ELEM2   -3
3   3   ELEM1   4
7   3   ELEM2   -2

暫無
暫無

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

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