首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当索引匹配时,用序列中的值从数据框行中的所有列中减去

当索引匹配时,用序列中的值从数据框行中的所有列中减去
EN

Stack Overflow用户
提问于 2019-03-12 03:49:07
回答 2查看 49关注 0票数 2

我正在尝试从在list中具有匹配索引的DataFrame的行中的所有列中减去1。

例如,如果我有一个这样的DataFrame:

代码语言:javascript
复制
df = pd.DataFrame({'AMOS Admin': [1,1,0,0,2,2], 'MX Programs': [0,0,1,1,0,0], 'Material Management': [2,2,2,2,1,1]})

print(df)
       AMOS Admin  MX Programs  Material Management
0           1            0                    2
1           1            0                    2
2           0            1                    2
3           0            1                    2
4           2            0                    1
5           2            0                    1

我想从index在2,3的所有列中减去1,所以最终结果是:

代码语言:javascript
复制
    AMOS Admin  MX Programs  Material Management
0           1            0                    2
1           1            0                    2
2          -1            0                    1
3          -1            0                    1
4           2            0                    1
5           2            0                    1

在找不到这样做的方法后,我创建了一个系列:

代码语言:javascript
复制
sr = pd.Series([1,1], index=['2', '3'])
print(sr)
2    1
3    1
dtype: int64

但是,按照this question应用sub方法会产生一个DataFrame,其中所有NaN和新行都在底部。

代码语言:javascript
复制
    AMOS Admin  MX Programs Material Management
0   NaN         NaN         NaN
1   NaN         NaN         NaN
2   NaN         NaN         NaN
3   NaN         NaN         NaN
4   NaN         NaN         NaN
5   NaN         NaN         NaN
2   NaN         NaN         NaN
3   NaN         NaN         NaN

任何帮助都将不胜感激。

谢谢,胡安

EN

回答 2

Stack Overflow用户

发布于 2019-03-12 04:01:02

sr中使用reindex,然后使用values进行减法

代码语言:javascript
复制
df.loc[:]=df.values-sr.reindex(df.index,fill_value=0).values[:,None]
df
Out[1117]: 
   AMOS Admin  MX Programs  Material Management
0           1            0                    2
1           1            0                    2
2          -1            0                    1
3          -1            0                    1
4           2            0                    1
5           2            0                    1
票数 1
EN

Stack Overflow用户

发布于 2019-03-12 03:57:12

如果你想做的是这么具体,为什么不直接:

代码语言:javascript
复制
df.loc[[2, 3], :] = df.loc[[2, 3], :].subtract(1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55109304

复制
相关文章

相似问题

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