我正在尝试从在list中具有匹配索引的DataFrame的行中的所有列中减去1。
例如,如果我有一个这样的DataFrame:
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,所以最终结果是:
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在找不到这样做的方法后,我创建了一个系列:
sr = pd.Series([1,1], index=['2', '3'])
print(sr)
2 1
3 1
dtype: int64但是,按照this question应用sub方法会产生一个DataFrame,其中所有NaN和新行都在底部。
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任何帮助都将不胜感激。
谢谢,胡安
发布于 2019-03-12 04:01:02
在sr中使用reindex,然后使用values进行减法
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发布于 2019-03-12 03:57:12
如果你想做的是这么具体,为什么不直接:
df.loc[[2, 3], :] = df.loc[[2, 3], :].subtract(1)https://stackoverflow.com/questions/55109304
复制相似问题