pandas 如何基于掩码numpy数组将一系列值求和到 Dataframe 中

7fyelxc5  于 2023-03-16  发布在  其他
关注(0)|答案(3)|浏览(163)

我有以下变量:

import pandas as pd
import numpy as np

y = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=['A', 'B', 'C'])
mask_y = np.array([[True, False, False], [False, False, True], [False, False, False]])
dist_y = pd.Series([0.222, 0.333, 0.444])

我需要将dist_y的值添加到y中,使用mask_yTrue的值作为条件。

A  B      C
0  1.222  2  3.000
1  4.000  5  6.333
2  7.000  8  9.000

我尝试了以下方法:

y.loc[:, mask_y] += dist_y.values[:, None]

但这不管用。你知道我该怎么做吗?

zd287kbt

zd287kbt1#

您可以使用广播的dist_y添加y,然后有条件地将结果赋回

y[mask_y] = y + dist_y.values[:, None]
$ print(y)

       A  B      C
0  1.222  2  3.000
1  4.000  5  6.333
2  7.000  8  9.000
b1uwtaje

b1uwtaje2#

import numpy as np
import pandas as pd
from pandas import DataFrame as df
import inspect

df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=['A', 'B', 'C'])
"""
   A  B  C
0  1  2  3
1  4  5  6
2  7  8  9
"""
mask_df = np.array([[True, False, False], [False, False, True], [False, False, False]])
dist_df = pd.Series([0.222, 0.333, 0.444])


"""
Requirement :

Add the values of dist_df into df using the mask_df True values as condition.
 
""" 
res = df.mask(mask_df, df.add(dist_df, axis=0))
print (res)

"""
       A  B      C
0  1.222  2  3.000
1  4.000  5  6.333
2  7.000  8  9.000

"""
ar7v8xwq

ar7v8xwq3#

稍微修改一下Ynjxsjmh's answer,就可以提高效率。

y = mask_y * dist_y.values[None, :].T + y

相关问题