繁体   English   中英

Python Pandas检查值是否从一个DataFrame到另一个DataFrame

[英]Python Pandas checking for a value if it exists from one DataFrame to another DataFrame

我有一个Excel文件,其中每个列都用作DataFrame。 这是我正在使用的5个数据框-( 为了方便澄清,我将添加一个行号列。它不包含在原始文件中 ):

row_no   svc_no   i_status   caller_id   f_status   remarks
1        11111    WO         22222       WO
2        22222    WO         11111       WO

3        33333    WO         n/a         FA
4        NULL     FA         33333       WO

5        444444   WO         55555       WO
6        55555    WO         new_num     WO

满足条件后,需要在“ remarks列中输入一个值。 在这种情况下,存在3个场景,其中每个场景都有不同的条件。

注意:每个数据的行可能会有所不同,但以我的示例为例,我将它们连续放置

方案1条件(第1行和第2行):

  • svc_no不等于caller_id
  • svc_no不为NULL
  • caller_id不是n / a
  • svc_nocaller_id ,反之亦然
  • i_statusf_statusWO

方案2条件(第3行和第4行):

  • svc_no不等于caller_id
  • svc_nocaller_id ,反之亦然
  • svc_no的值与n / a匹配,而caller_id其对的值与NULL匹配
  • 如果i_statusf_status为FA,则值为NULLn / a

方案3的情况(第5行和第6行):

  • svc_no不等于caller_id
  • svc_no是6个数字字符
  • caller_idnew_num
  • i_statusf_statusWO
  • svc_nocaller_id ,反之亦然

现在说我满足每种情况的条件,我将不得不在备注中输入一个指定的值。 所以我想要的输出将是:

row_no   svc_no   i_status   caller_id   f_status   remarks
1        11111    WO         22222       WO         S1 Transpose
2        22222    WO         11111       WO         S1 Transpose

3        33333    WO         n/a         FA         S2 Transpose
4        NULL     FA         33333       WO         S2 Transpose

5        444444   WO         55555       WO         S3 Transpose
6        55555    WO         new_num     WO         S3 Transpose

我的问题是,即使我的代码可以正常工作并且符合条件,输出也不准确。 这是我的代码:

# Scenario 1

df.loc[(df['svc_no'] != df['caller_id']) &
       (df['svc_no'].isin(df['caller_id'])) &
       (df['caller_id'].isin(df['svc_no'])) &
       (df['svc_no'] != 'NULL') &
       (df['caller_id'] != 'n/a') &
       (df['i_status'] == 'WO') &
       (df['f_status'] == 'WO'), ['remarks']] = 'S1 Transpose'

# Scenario 2
# NULL svc_no
df.loc[(df['svc_no'] == 'NULL') &
       (df['caller_id'] !='n/a') &
       (df['svc_no'].isin(df['caller_id'])) &
       (df['caller_id'].isin(df['svc_no'])) &
       (df['i_status'] == 'FA') &
       (df['f_status'] == 'WO')['remarks']] = 'S2 Transpose'

# n/a in caller_id
df.loc[(df['svc_no'] != 'NULL') &
       (df['caller_id'] =='n/a') &
       (df['svc_no'].isin(df['caller_id'])) &
       (df['caller_id'].isin(df['svc_no'])) &
       (df['i_status'] == 'WO') &
       (df['f_status'] == 'FA')['remarks']] = 'S2 Transpose'

# Scenario 3
df.loc[(c_merge['svc_no'] != 'NULL') &
       (df['svc_no'].isin(c_merge['caller_id'])) &
       (df['caller_id'].isin(c_merge['svc_no'])) &
       (df['i_status'] == 'WO') &
       (df['caller_id'] != c_merge['svc_no']) &
       (df['f_status'] == 'WO') &
       (df['caller_id'] == 'new_num', ['remarks']] = s3_wo_wo

我的输出是:

row_no   svc_no   i_status   caller_id   f_status   remarks
1        11111    WO         22222       WO         S1 Transpose
2        22222    WO         11111       WO         S1 Transpose

3        33333    WO         n/a         FA         S1 Transpose
4        NULL     FA         33333       WO         S1 Transpose

5        444444   WO         55555       WO         
6        55555    WO         new_num     WO         S3 Transpose

S1 Transpose也输入S2 TransposeS3 Transpose only那些, S3 Transpose only将输入成一行。

有没有一种方法可以将适用条件的2行分组? 还是有一种方法可以将我的代码应用于受影响的特定行?

我的回答是:我在下面的每一行中使用了df.loc。

我能够实现输出而无需将包含转置值的两行分组。

(df['svc_no']isint(df['caller_id'])) ,我确定该值是否存在于svc_nocaller_id并为另一行创建了另一个df.loc

场景1

df.loc[(c_merge['svc_no'] != 'NULL') & /
      (df['i_status'] == 'WO') & /
      (df['caller_id'] != 'n/a') & /
      (df['f_status'] == 'WO') & /
      (df['svc_no'] != df['caller_id']) & /
      (df['svc_no'].isin(df['caller_id'])), ['remarks']] = 'S1 Transpose'

df.loc[(c_merge['svc_no'] != 'NULL') & /
      (df['i_status'] == 'WO') & /
      (df['caller_id'] != 'n/a') & /
      (df['f_status'] == 'WO') & /
      (df['svc_no'] != df['caller_id']) & /
      (df['caller_id'].isin(df['svc_no'])), ['remarks']] = 'S1 Transpose'

我将其应用于其他情况,因为我认为这是解决问题的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM