假设我有一个数据帧,其中每5行都填充了NAS,如下所示:

Number A B C
4 2 1 0
5 NA NA NA
6 5 6 7
100 3 5 2

我想用第3行的值替换您可以在第5行找到的NA值.

到目前为止,我try 过的是:

df.loc[df['Number'] % 5 == 0, ['A','B','C']] = df.loc[df['Number'] % 3 == 0, ['A','B','C']]

这种方法不会抛出任何错误,但它不会做任何事情.但是,如果我将赋值的右侧替换为常量,则可以很好地工作,如下所示:

df.loc[df['Number'] % 5 == 0, ['A','B','C']] = 3

你有什么办法让它发挥作用吗?

编辑:

我不想给出完整的原始任务,但是这个虚拟的例子有点错误.让我们假设右侧的行数与左侧的行数相同.主要目标仍然是根据条件用数据帧的子集替换每5行的值.我希望这能更容易理解一些,并为错别化感到抱歉.

推荐答案

您的索引未对齐,这就是它不起作用的原因:

# Left hand side
>>> df.loc[df['Number'] % 5 == 0, ['A','B','C']]
     A    B    C
1  NA   NA   NaN
3   3    5   2.0

# Right hand side
>>> df.loc[df['Number'] % 3 == 0, ['A','B','C']]
    A   B    C
2  5   6   7.0

Pandas 不能在(1,3)和2之间对齐索引.解决方案是将右侧转换为.values.to_numpy()的NumPyarray.但是,如果执行此操作,还会更改第四行.

最新情况:

让我们假设右侧的行数与左侧的行数相同

在这种情况下,请使用:

df.loc[df['Number'] % 5 == 0, ['A','B','C']] = \
    df.loc[df['Number'] % 3 == 0, ['A','B','C']].values
# Before (I slightly modified your example)
>>> df
   Number    A    B    C
0       3  2.0  1.0  0.0
1       5  NaN  NaN  NaN
2       6  5.0  6.0  7.0
3     100  NaN  NaN  NaN

# After
>>> df
   Number    A    B    C
0       3  2.0  1.0  0.0
1       5  2.0  1.0  0.0
2       6  5.0  6.0  7.0
3     100  5.0  6.0  7.0

Python相关问答推荐

如何根据条件在多指标框架上进行groupby

在Python和matlab中显示不同 colored颜色 的图像

仅从风格中获取 colored颜色 循环

如何在polars(pythonapi)中解构嵌套 struct ?

如何使用根据其他值相似的列从列表中获取的中间值填充空NaN数据

Telethon加入私有频道

如何将一个动态分配的C数组转换为Numpy数组,并在C扩展模块中返回给Python

为什么numpy. vectorize调用vectorized函数的次数比vector中的元素要多?

如何更改groupby作用域以找到满足掩码条件的第一个值?

从旋转的DF查询非NaN值

Django Table—如果项目是唯一的,则单行

用fft计算指数复和代替求和来模拟衍射?

如何在信号的FFT中获得正确的频率幅值

Pandas数据框上的滚动平均值,其中平均值的中心基于另一数据框的时间

高效生成累积式三角矩阵

用来自另一个数据框的列特定标量划分Polars数据框中的每一列,

时长超过24小时如何从Excel导入时长数据

PYTHON中的selenium不会打开 chromium URL

Match-Case构造中的对象可调用性测试

普洛特利express 发布的人口普查数据失败