簡體   English   中英

Python轉置數據幀行作為列名和列作為行

[英]Python Transpose Dataframe Rows as Column names and columns as rows

我有一個包含多個 x 和 y 列數據的大 df。 我想將 y 數據插入到常見的 x 值,然后使用常見的 x 值作為列名和 y 值作為行轉置數據。

我的代碼:

df = pd.DataFrame({'x1':np.linspace(0,10,5),'y1':np.linspace(0,50,5),'x2':np.linspace(0,8,5),'y2':np.linspace(0,80,5),'x3':np.linspace(0,9,5),'y3':np.linspace(0,90,5)})

df = 
     x1    y1   x2    y2    x3    y3
0   0.0   0.0  0.0   0.0  0.00   0.0
1   2.5  12.5  2.0  20.0  2.25  22.5
2   5.0  25.0  4.0  40.0  4.50  45.0
3   7.5  37.5  6.0  60.0  6.75  67.5
4  10.0  50.0  8.0  80.0  9.00  90.0

x 列的范圍是 0-10。 我想為相同的 x 0-10 范圍內插 y 列數據。 我在這里舉一個例子

預期答案:

df = 
     x    y1   y2   y3
0   0     0    0    0
1   2.0   10   20   25
2   4.0   20   40   50
3   6.0   30   60   75
4   8.0   40   80   100
# I want to transpose the x data as column names and y columns as rows data
df = 
      0.0   2.0    4.0   6.0   8.0
y1    0     10     20    30    40  
y2    0     20     40    60    80
y3    0     25     50    75    100

df.T將轉置數據幀。

請嘗試以下操作:

df.columns = pd.MultiIndex.from_arrays([[i[1] for i in df.columns],
                                         [i[0] for i in df.columns]])

def y_over_x(d):
    d = d.droplevel(0, axis=1)
    return d['y']/d['x']

y = df.groupby(level=0, axis=1).apply(y_over_x).fillna(0).add_prefix('y')
x = pd.Series(np.arange(0, 10, 2), name='x')

df2 = pd.concat([x, y.mul(x, axis=0).astype(int)], axis=1)

輸出:

    x   y1  y2  y3
0   0   0   0   0
1   2   10  20  20
2   4   20  40  40
3   6   30  60  60
4   8   40  80  80

然后轉置:

df2.set_index('x').T

輸出:

x   0   2   4   6   8
y1  0  10  20  30  40
y2  0  20  40  60  80
y3  0  20  40  60  80

暫無
暫無

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

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