numpy 根据字典和条件更新 Dataframe 中的值

avkwfej4  于 2023-01-26  发布在  其他
关注(0)|答案(2)|浏览(119)

我有一个 Dataframe 和一个字典,其中包含 Dataframe 的一些列和一些值。我想根据字典值更新 Dataframe ,并选择更高的值。

>>> df1

    a   b   c   d   e   f
0   4   2   6   2   8   1
1   3   6   7   7   8   5
2   2   1   1   6   8   7
3   1   2   7   3   3   1
4   1   7   2   6   7   6
5   4   8   8   2   2   1

字典是

compare = {'a':4, 'c':7, 'e':3}

所以我想检查列['a','c','e ']中的值,如果它更大,就用字典中的值替换。
我所尝试的是:

comp = pd.DataFrame(pd.Series(compare).reindex(df1.columns).fillna(0)).T

df1[df1.columns] = df1.apply(lambda x: np.where(x>comp, x, comp)[0] ,axis=1)

例外输出:

>>>df1

    a   b   c   d   e   f
0   4   2   7   2   8   1
1   4   6   7   7   8   5
2   4   1   7   6   8   7
3   4   2   7   3   3   1
4   4   7   7   6   7   6
5   4   8   8   2   3   1
aydmsdu9

aydmsdu91#

limits = df.columns.map(compare).to_series(index=df.columns)
new    = df.mask(df < limits, limits, axis=1)
  • 从字典中获取索引为df列和值的Series
  • 检查帧的值是否小于“限值”;如果有,说明有哪些限制;否则,照原样

得到

>>> new

   a  b  c  d  e  f
0  4  2  7  2  8  1
1  4  6  7  7  8  5
2  4  1  7  6  8  7
3  4  2  7  3  3  1
4  4  7  7  6  7  6
5  4  8  8  2  3  1
sqxo8psd

sqxo8psd2#

基于numpy的另一种可能的解决方案是:

cols = list(compare.keys())
df[cols] = np.maximum(df[cols].values, np.array(list(compare.values())))

输出:

a  b  c  d  e  f
0  4  2  7  2  8  1
1  4  6  7  7  8  5
2  4  1  7  6  8  7
3  4  2  7  3  3  1
4  4  7  7  6  7  6
5  4  8  8  2  3  1

相关问题