簡體   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