簡體   English   中英

dataframe 中兩列之間的唯一元素

[英]Unique elements between two columns in a dataframe

我剛剛開始使用 Pandas,我對它的靈活性感到驚訝,但我遇到了障礙,需要一些幫助

我有一個數據框 Df:

  | Contract | Box1       | Box2         |
  | A        | Red,White  | Red,Black    |
  | B        | Red        | White,Black  |
  | C        | Black      | Black        |

我想找到 Box1 和 Box2 之間不常見的條目,並將它們存儲在兩個新的單獨列中,以便 output 看起來像這樣:

  | Contract   | Box1_unique | Box2_unique|
  | A          | White       | Black      |
  | B          | Red         | White,Black|
  | C          | -           |  -         |

我試過了

Df['Box1_unique'] = Df['Box1']-Df['Box2']

但這沒有用。

set.difference的列表理解中使用zip - 應該更改順序:

df[['Box1','Box2']] = [(','.join(set(a.split(',')).difference(b.split(','))), 
                        ','.join(set(b.split(',')).difference(a.split(','))))
                       for a, b in zip(df['Box1'], df['Box2'])]
print (df)
  Contract   Box1         Box2
0        A  White        Black
1        B    Red  Black,White
2        C                    

或者not in語句的生成器理解 - 排序就像原來的一樣:

df[['Box1','Box2']] = [(','.join(i for i in a.split(',') if i not in b.split(',')), 
                        ','.join(i for i in b.split(',') if i not in a.split(',')))
                       for a, b in zip(df['Box1'], df['Box2'])]
print (df)
  Contract   Box1         Box2
0        A  White        Black
1        B    Red  White,Black
2        C                    

最后設置-使用:

df[['Box1','Box2']] = df[['Box1','Box2']].mask(df[['Box1','Box2']].eq(''), '-')
print (df)
  Contract   Box1         Box2
0        A  White        Black
1        B    Red  White,Black
2        C      -            -

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM