【问题标题】:Pandas replace specific cells with corresponding values from another seriesPandas 用另一个系列中的相应值替换特定单元格
【发布时间】:2022-10-05 00:15:37
【问题描述】:
假设我有以下 pd.DataFrame:
| INDEX |
a |
b |
c |
| A |
5 |
7 |
2 |
| B |
3 |
2 |
1 |
| C |
9 |
6 |
3 |
还有以下 pd.Series:
我想根据列名将大于或等于 6 的 DataFrame 替换为 Series 中的相应值。
例如,我想将单元格 Ab (7>6) 替换为 -4(因为单元格 Ab 在 col b 中,并且该系列在该索引中具有 -4)。
在上面的示例中,DataFrame 将如下所示:
| ~ |
a |
b |
c |
| A |
5 |
-4 |
2 |
| B |
3 |
2 |
1 |
| C |
-1 |
-4 |
3 |
我知道如何使用以下方法识别所需的单元格:
df[df>=6],但是当我尝试分配系列时 (df[df>=6]=series) 出现错误。
谢谢 :)
标签:
python
pandas
dataframe
【解决方案1】:
你可以mask和fillna:
out = df.mask(df.ge(6)).fillna(s, downcast='infer')
输出:
a b c
INDEX
A 5 -4 2
B 3 2 1
C -1 -4 3
【解决方案2】:
让我们一起做mask axis=1
df.mask(df >= 6, series, axis=1)
a b c
INDEX
A 5 -4 2
B 3 2 1
C -1 -4 3
【解决方案3】:
使用布尔索引和fillna:
s = pd.Series([-1,-4,-5],['a','b','c'])
df[df.lt(6)].fillna(s)
a b c
INDEX
A 5.0 -4.0 2
B 3.0 2.0 1
C -1.0 -4.0 3