我正在尝试从DataFrame
的行中所有在list
中具有匹配索引的列中减去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
我想从索引在[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应用子方法会导致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
任何帮助将不胜感激。
谢谢, 胡安
答案 0 :(得分:1)
与reindex
一起使用sr
,然后使用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
答案 1 :(得分:0)
如果您想做的是特定的,为什么不这样做:
df.loc[[2, 3], :] = df.loc[[2, 3], :].subtract(1)