我有這樣的熊貓資料框:
import pandas as pd
pdata = (
{'id': [26, 26, 26, 26, 26, 12, 12, 12, 12, 12],
'cat': [18, 18, 18, 18, 18, 18, 18, 18, 18, 18],
's43': [7.7, 4.0, 5.8, 5.6, 6.2, 10, 10, 10, 10, 10],
's44': [6.9, 2.4, 5.3, 4.3, 2.0, 9.9, 9.9, 10, 8.2, 10],
's45': [7.7, 3.7, 5.1, 5.5, 5.7, 10, 10, 10, 10, 10],
's46': [7.8, 3.6, 4.9, 5.3, 5.0, 9.9, 9.9, 9.9, 10, 9.9],
's47': [6.7, 1.4, 3.4, 1.9, 1.1, 10, 10, 10, 5.0, 10],
's40': [7.7, 4.0, 5.6, 5.7, 5.0, 10, 10, 10, 10, 10]
}
)
pdata = pd.DataFrame(pdata)
和這樣的熊貓系列:
pseries = ({'pen': 0.450000,
'rs': 0.693650,
's43': 0.142731,
's44': 0.170520,
's45': 0.061518,
's46': 0.014668,
's47': 0.129210,
's40': 0.409219}
)
pseries = pd.Series(pseries)
我想要做的是將資料幀乘以系列并回傳一個資料幀,其中軸的新值與顯示 NaN 的列中的原始資料相乘。
我用過pseries.mul(pdata, axis=index, fill_value=1),但它似乎沒有按照我的想法做。
cat id pen rs s40 s43 s44 s45 s46 s47
0 NaN NaN NaN NaN 3.150986 1.099029 1.176588 0.473689 0.114410 0.865707
1 NaN NaN NaN NaN 1.636876 0.570924 0.409248 0.227617 0.052805 0.180894
2 NaN NaN NaN NaN 2.291626 0.827840 0.903756 0.313742 0.071873 0.439314
3 NaN NaN NaN NaN 2.332548 0.799294 0.733236 0.338349 0.077740 0.245499
4 NaN NaN NaN NaN 2.046095 0.884932 0.341040 0.350653 0.073340 0.142131
5 NaN NaN NaN NaN 4.092190 1.427310 1.688148 0.615180 0.145213 1.292100
6 NaN NaN NaN NaN 4.092190 1.427310 1.688148 0.615180 0.145213 1.292100
7 NaN NaN NaN NaN 4.092190 1.427310 1.705200 0.615180 0.145213 1.292100
8 NaN NaN NaN NaN 4.092190 1.427310 1.398264 0.615180 0.146680 0.646050
9 NaN NaN NaN NaN 4.092190 1.427310 1.705200 0.615180 0.145213 1.292100
當我使用
col = ['s40', 's43', 's44', 's45', 's46', 's47']
pdata[col] = pdata[col].mul(pseries[col], axis=1)
我得到下面的輸出,沒有來自 pSeries 的 'pen' 和 'rs' 值:
id cat s43 s44 s45 s46 s47 s40
0 26 18 1.099029 1.176588 0.473689 0.114410 0.865707 3.150986
1 26 18 0.570924 0.409248 0.227617 0.052805 0.180894 1.636876
2 26 18 0.827840 0.903756 0.313742 0.071873 0.439314 2.291626
3 26 18 0.799294 0.733236 0.338349 0.077740 0.245499 2.332548
4 26 18 0.884932 0.341040 0.350653 0.073340 0.142131 2.046095
5 12 18 1.427310 1.688148 0.615180 0.145213 1.292100 4.092190
6 12 18 1.427310 1.688148 0.615180 0.145213 1.292100 4.092190
7 12 18 1.427310 1.705200 0.615180 0.145213 1.292100 4.092190
8 12 18 1.427310 1.398264 0.615180 0.146680 0.646050 4.092190
9 12 18 1.427310 1.705200 0.615180 0.145213 1.292100 4.092190
附錄:對不起,預期的輸出如下所示:
cat id pen rs s40 s43 s44 s45 s46 s47
0 18.0 26.0 0.45 0.693650 3.150986 1.099029 1.176588 0.473689 0.114410 0.865707
1 18.0 26.0 0.450 0.693650 1.636876 0.570924 0.409248 0.227617 0.052805 0.180894
2 18.0 26.0 0.450 0.693650 2.291626 0.827840 0.903756 0.313742 0.071873 0.439314
3 18.0 26.0 0.450 0.693650 2.332548 0.799294 0.733236 0.338349 0.077740 0.245499
4 18.0 26.0 0.450 0.693650 2.046095 0.884932 0.341040 0.350653 0.073340 0.142131
5 18.0 12.0 0.450 0.693650 4.092190 1.427310 1.688148 0.615180 0.145213 1.292100
6 18.0 12.0 0.450 0.693650 4.092190 1.427310 1.688148 0.615180 0.145213 1.292100
7 18.0 12.0 0.450 0.693650 4.092190 1.427310 1.705200 0.615180 0.145213 1.292100
8 18.0 12.0 0.450 0.693650 4.092190 1.427310 1.398264 0.615180 0.146680 0.646050
9 18.0 12.0 0.450 0.693650 4.092190 1.427310 1.705200 0.615180 0.145213 1.292100
uj5u.com熱心網友回復:
pseries您可以在將字典轉換為缺少列值的系列之前更新字典,并在缺少列的情況下添加pdata列并相乘。
pseries.update({col: 1 for col in pdata.columns.difference(pseries.keys())})
pseries = pd.Series(pseries)
pdata = pdata.assign(**{col: 1 for col in pseries.keys().difference(pdata.columns)})
out = pdata.mul(pseries)
輸出:
cat id pen rs s40 s43 s44 s45 \
0 18.0 26.0 0.45 0.69365 3.150986 1.099029 1.176588 0.473689
1 18.0 26.0 0.45 0.69365 1.636876 0.570924 0.409248 0.227617
2 18.0 26.0 0.45 0.69365 2.291626 0.827840 0.903756 0.313742
3 18.0 26.0 0.45 0.69365 2.332548 0.799294 0.733236 0.338349
4 18.0 26.0 0.45 0.69365 2.046095 0.884932 0.341040 0.350653
5 18.0 12.0 0.45 0.69365 4.092190 1.427310 1.688148 0.615180
6 18.0 12.0 0.45 0.69365 4.092190 1.427310 1.688148 0.615180
7 18.0 12.0 0.45 0.69365 4.092190 1.427310 1.705200 0.615180
8 18.0 12.0 0.45 0.69365 4.092190 1.427310 1.398264 0.615180
9 18.0 12.0 0.45 0.69365 4.092190 1.427310 1.705200 0.615180
s46 s47
0 0.114410 0.865707
1 0.052805 0.180894
2 0.071873 0.439314
3 0.077740 0.245499
4 0.073340 0.142131
5 0.145213 1.292100
6 0.145213 1.292100
7 0.145213 1.292100
8 0.146680 0.646050
9 0.145213 1.292100
uj5u.com熱心網友回復:
#Subset,轉換為陣列,相乘再轉換為df
pdata.update(pd.DataFrame(pdata.iloc[:,2:].to_numpy()*pseries.iloc[2:].to_numpy(), columns=pdata.iloc[:,2:].columns))
分配 pdseries 的缺失部分
pdata=pdata.assign(**pseries.iloc[:2])
結果
id cat s43 s44 s45 s46 s47 s40 pen \
0 26 18 1.099029 1.176588 0.473689 0.114410 0.865707 3.150986 0.45
1 26 18 0.570924 0.409248 0.227617 0.052805 0.180894 1.636876 0.45
2 26 18 0.827840 0.903756 0.313742 0.071873 0.439314 2.291626 0.45
3 26 18 0.799294 0.733236 0.338349 0.077740 0.245499 2.332548 0.45
4 26 18 0.884932 0.341040 0.350653 0.073340 0.142131 2.046095 0.45
5 12 18 1.427310 1.688148 0.615180 0.145213 1.292100 4.092190 0.45
6 12 18 1.427310 1.688148 0.615180 0.145213 1.292100 4.092190 0.45
7 12 18 1.427310 1.705200 0.615180 0.145213 1.292100 4.092190 0.45
8 12 18 1.427310 1.398264 0.615180 0.146680 0.646050 4.092190 0.45
9 12 18 1.427310 1.705200 0.615180 0.145213 1.292100 4.092190 0.45
rs
0 0.69365
1 0.69365
2 0.69365
3 0.69365
4 0.69365
5 0.69365
6 0.69365
7 0.69365
8 0.69365
9 0.69365
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/414782.html
標籤:
