Вычтите из всех столбцов в строке информационного кадра значение в Серии, когда индексы совпадают - PullRequest
2 голосов
/ 11 марта 2019

Я пытаюсь вычесть 1 из всех столбцов в строках DataFrame, имеющих соответствующий индекс в list.

Например, если у меня есть 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

Я хочу вычесть 1 из всех столбцов, где индекс находится в [2, 3], чтобы конечный результат был:

    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

Однако, если применить метод 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

Любая помощь будет наиболее ценной.

Спасибо, Juan

Ответы [ 2 ]

1 голос
/ 11 марта 2019

Используя 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
0 голосов
/ 11 марта 2019

Если то, что вы хотите сделать, это что-то конкретное, почему бы вам не просто:

df.loc[[2, 3], :] = df.loc[[2, 3], :].subtract(1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...