Python dataframe-如何基于下一列值修改值

Python dataframe-如何基于下一列值修改值,python,pandas,dataframe,Python,Pandas,Dataframe,我有这样的数据帧: 我想实现这样的目标: 如果下一列的值与同一行的第二列的值不同,如何加减号?在T2之后的列中,我们有W,但在第二列中是N,在这种情况下,我需要在数字之前减去 我搜索了很多文档,shift选项似乎很有用,但没有列的名称会导致问题。首先,我建议重命名NaN列,使它们具有唯一的名称,以免混淆(如NaN_0、NaN_1、NaN_2等) 你可以试试这样的东西: for i, col in enumerate(df.columns): if i < 2:

我有这样的数据帧:

我想实现这样的目标:

如果下一列的值与同一行的第二列的值不同,如何加减号?在T2之后的列中,我们有W,但在第二列中是N,在这种情况下,我需要在数字之前减去


我搜索了很多文档,shift选项似乎很有用,但没有列的名称会导致问题。

首先,我建议重命名NaN列,使它们具有唯一的名称,以免混淆(如NaN_0、NaN_1、NaN_2等)

你可以试试这样的东西:

for i, col in enumerate(df.columns):
    if i < 2:
        continue
    if 'NaN' is in col:
        continue
    else:
        mask = df.iloc[:, 1] != df.iloc[:, (i+1)]
        df.loc[mask, col] = df[col]* (-1)
对于i,枚举中的列(df.列):
如果i<2:
持续
如果“NaN”在列中:
持续
其他:
掩码=df.iloc[:,1]!=df.iloc[:,(i+1)]
df.loc[mask,col]=df[col]*(-1)

我对pandas/python也很陌生,所以很可能存在一个更优雅/更快的解决方案来解决您的问题。

您可以在python中使用iloc

for i in range(df.shape[0]):
    if(df.iloc[i,1] != df.iloc[i,5]):
        df.iloc[i,4] = df.iloc[i,4]*(-1)

据我所知,您的问题是,如果第2列的行值(即索引=1)和最后一列的值不同,则否定列“T2\n”中的值,否则保持相同的值。如果我在这个问题上错了,请纠正我

如果df是您的数据帧,那么请尝试

df['T2\n']=df.apply(λx:-1*x['T2\n']如果x.iloc[1]!=x.iloc[-1]否则x['T2\n'],轴=1)


注意:下次发布问题时,请以更好的方式解释您的问题

谢谢您的解答!这是可行的,但是如果col中的'if'Nan'是正确的,而没有'if'Nan'是正确的