首页 > 解决方案 > 如何通过比较 Panda 数据框中的两个嵌套连续行来创建新列?

问题描述

我需要在 Panda Dataframe 中编写代码。所以:ID列中的值将依次检查它们是否相同。这里出现了三种情况。情况1:如果ID和下一行不一样,在Comment栏写成“唯一”。情况2:如果ID与下一列相同,与下一列不同,在Comment列写为“ring”。情况3:如果ID与后面的多列相同,在Comment列写为“multi”。情况 4:执行此操作,直到 ID 列中的行完成。

import pandas as pd

df = pd.read_csv('History-s.csv')

a = len(df['ID'])
c = 0
while a != 0:
 c += 1
    while df['ID'][i] == df['ID'][i + 1]:
        if c == 2:
           if df['Nod 1'][i] == df['Nod 2'][i + 1]:
               df['Comment'][i] = "Ring"
               df['Comment'][i + 1] = "Ring"
          else:
               df['Comment'][i] = "Multi"
               df['Comment'][i + 1] = "Multi"
         elif c > 2:
             df['Comment'][i] = "Multi"
             df['Comment'][i + 1] = "Multi"
        i += 1
   else:
        df['Comment'][i] = "Unique"

a = a -1 print(df, '\n')

数据是这样的: 数据 编码后的数据帧应该是这样的: 结果

标签: pythonpandasdataframewhile-loop

解决方案


从您提供的输入数据框中,我的第一印象是,当您在 while 循环中检查下一行时,您正在严格考虑下一个 comin 行,例如。

ID 价值 评论
1 2
1 3 戒指
3 4 独特的

但如果不是这样,您可以简单地使用 pandas groupby 功能。

def func(df):
    if len(df)>2:
        df['comment'] = 'MULTI'
    elif len(df)==2:
        df['comment'] = 'RING'
    else:
        df['comment'] = 'UNIQUE'
    return df

df = df.groupby(['ID']).apply(func)

输出:

   ID   value   comment
0   1   2       RING
1   1   3       RING
2   3   4       UNIQUE

推荐阅读