pandas 如果满足特定条件,则更新 Dataframe

vq8itlhq  于 2023-02-27  发布在  其他
关注(0)|答案(5)|浏览(159)

任何帮助将不胜感激这里:
假设我有一个Pandas DataFrame,例如:

Column1 Column2 Column3 Column4  Column5 Column6

0  aaa      abb  jnhs  01/01/2020      40   TEST
1  aba      vvv  jnjh  01/01/2020      34   TEST

我正在寻找能够测试某个条件是否存在的最佳方法,如果确实存在,则取标题"column5"下同一行上的数字,并将该数字加1。然后返回完整的 Dataframe ,其中col6 ="TEST"的col5中的单元格仅加1。
下面是我正在查找的Dataframe结果:

Column1 Column2 Column3 Column4  Column5 Column6

0  aaa      abb  jnhs  01/01/2020      41   TEST
1  aba      vvv  jnjh  01/01/2020      35   TEST

到目前为止我已经尝试过:
df['Column5'] = np.where(df['Colum6'] == "TEST", +1, "NA")
然而,这将用1替换列5中的值,并且不向当前值加1以使它们分别为41和35。
谢谢你的帮助。

bmp9r5qi

bmp9r5qi1#

您可以查找满足条件的行,然后将Column5加上+1

mask = df["Column6"] == "TEST"
df.loc[mask, "Column5"] += 1
hc8w905p

hc8w905p2#

Pandas文档建议使用掩码来索引所需的行,然后使用另一个答案中建议的+=操作符,或者索引任何其他行,然后添加+1或任何其他所需的值。

import pandas as pd
import numpy as np

data = {"Index" : [0,1, 2], "A": [1, 1, 1],
        "B": [42, 42, 42], "C": ["test","test", "NA"]}

df = pd.DataFrame(data)
>>>df

Index   A   B   C
0   0   1   42  test
1   1   1   42  test
2   2   1   42  NA
mask = df["C"]=="test"

df.loc[mask, "B"] = df["B"]+1
>>> df

Index   A   B   C
0   0   1   43  test
1   1   1   43  test
2   2   1   42  NA
s5a0g9ez

s5a0g9ez3#

这项工作:

df['Column5'] = np.where(df['Colum6'] == "TEST", df['Column5']+1, "NA")
s1ag04yj

s1ag04yj4#

您可以:

m = df["Column6"].eq("TEST")
df.loc[m, "Column5"] = df.loc[m, "Column5"].add(1)
sr4lhrrt

sr4lhrrt5#

进口Pandas当PD
结果= df ["第6列"]=="测试"
df. loc [结果,"第5列"]= df ["第5列"] +1

相关问题