簡體   English   中英

如何基於多索引列值創建熊貓數據框

[英]How to create pandas dataframe based on multi-index column values

我嘗試基於多索引列值創建新的數據框列

這是原始數據框

import pandas as pd
b = pd.DataFrame({'i':[1,1,1,2,2],'i2':[1,2,3,1,2],'v':[0.1,0.7,0.2,0.12,0.88] })
b.set_index(['i','i2'], inplace=True)

我想創建兩個新列,“ res1”和“ res2”。 兩者都從0.0到1.0。

對於每個索引“ i”記錄,從最小的“ i2”值開始到最大的“ i2”值。

“ res1”值從0.0開始,最小等於先前的“ v”值加上“ res1”值。

“ res2”值從最小的“ v”值開始,每次都添加“ v”值

我在這里很難解釋,所以我創建了兩個數據框。 b_expect是最終的預期結果,b_explain是如何生成資源的解釋。

b_explain = pd.DataFrame({'i':[1,1,1,2,2],'i2':[1,2,3,1,2],'v':[0.1,0.7,0.2,0.12,0.88], 'res1':[0, '0.1=0.0+0.1', '0.8=0.1+0.7',0.0,'0.12=0.0+0.12'],'res2':['0.1=0.0+0.1','0.8=0.1+0.7','1.0=0.8+0.2','0.12=0.0+0.12','1.0=0.12+0.88']})
b_expect = pd.DataFrame({'i':[1,1,1,2,2],'i2':[1,2,3,1,2],'v':[0.1,0.7,0.2,0.12,0.88], 'res1':[0, 0.1, 0.8,0.0,0.12],'res2':[0.1,0.8,1.0,0.12,1.0]})
b_explain.set_index(['i', 'i2'], inplace=True)
b_expect.set_index(['i', 'i2'], inplace=True)

b
Out[1]: 
         v
i i2      
1 1   0.10
  2   0.70
  3   0.20
2 1   0.12
  2   0.88

b_explain
Out[2]: 
         v           res1           res2
i i2                                    
1 1   0.10              0    0.1=0.0+0.1
  2   0.70    0.1=0.0+0.1    0.8=0.1+0.7
  3   0.20    0.8=0.1+0.7    1.0=0.8+0.2
2 1   0.12              0  0.12=0.0+0.12
  2   0.88  0.12=0.0+0.12  1.0=0.12+0.88

b_expect
Out[3]: 
         v  res1  res2
i i2                  
1 1   0.10  0.00  0.10
  2   0.70  0.10  0.80
  3   0.20  0.80  1.00
2 1   0.12  0.00  0.12
  2   0.88  0.12  1.00

假設您沒有其他NaN值:

b['res1'] = b.groupby(level=0).cumsum()
b['res2'] = b.groupby(level=0).cumsum().shift(1)['v'].fillna(0)

暫無
暫無

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

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