首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Pandas DataFrame乘成级数,并保留所有不同的列

将Pandas DataFrame乘成级数,并保留所有不同的列
EN

Stack Overflow用户
提问于 2022-01-19 00:14:09
回答 1查看 58关注 0票数 2

我有这样的熊猫数据:

代码语言:javascript
复制
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)

像这样的熊猫系列:

代码语言:javascript
复制
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),但它似乎没有做我想做的事情。

代码语言:javascript
复制
    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

当我用

代码语言:javascript
复制
col = ['s40', 's43', 's44', 's45', 's46', 's47']

pdata[col] = pdata[col].mul(pseries[col], axis=1)

下面的输出没有pseries中的“pen”和“rs”值:

代码语言:javascript
复制
    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

增编:对不起,预期产出如下:

代码语言:javascript
复制
   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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-19 00:52:08

#子集,转换为数组,乘并再转换为df

代码语言:javascript
复制
pdata.update(pd.DataFrame(pdata.iloc[:,2:].to_numpy()*pseries.iloc[2:].to_numpy(), columns=pdata.iloc[:,2:].columns))

指定pdseries的缺失部分。

代码语言:javascript
复制
pdata=pdata.assign(**pseries.iloc[:2])

结果

代码语言:javascript
复制
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 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70763907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档