簡體   English   中英

在 excel 文件中使用字符串對列進行排序 [with python,pandas]

[英]Sorting columns with strings in excel file [with python,pandas]

我是 pandas 的新手,我正在尋找排序和比較列,但我想對字符串進行排序。 我想對字符串進行排序,並像以前一樣留出空格 你有什么想法嗎? 我想用下面的代碼做點什么,但我不知道接下來該怎么做

import pandas as pd

df = pd.read_excel('test.xlsx')
print(df.query('a != b'))

INPUT: 
  a b
1 A C
2 B D
3 D 
4 C A

OUTPUT: 
  a b
1 A A
2 B 
3 D D
4 C C

您需要使用Series.map找到系列 b 的正確順序。 最后使用Series.replace替換:

df['b']=df['a'].map(pd.Series(df.index,df['b'].values)).replace(df['b'])
print(df)

   a    b
0  A    A
1  B  NaN
2  D    D
3  C    C

如果您想按照字典訂購,您需要首先使用DataFrame.sort_values根據列 a 訂購:

df=df.sort_values('a')
df['b']=df['a'].map(pd.Series(df.index,df['b'].values)).replace(df['b'])
print(df)

   a    b
0  A    A
1  B  NaN
3  C    C
2  D    D

您也可以使用DataFrame.mergesort = False

new_df=df['a'].to_frame().merge(df['b'].to_frame(),left_on='a',right_on='b',how='outer',indicator=True,sort=False).query('_merge!="right_only"').drop('_merge',axis=1)
print(new_df)

  a    b
0  A    A
1  B  NaN
2  D    D
3  C    C

sort = True

new_df=df['a'].to_frame().merge(df['b'].to_frame(),left_on='a',right_on='b',how='outer',indicator=True).query('_merge!="right_only"').drop('_merge',axis=1)
    print(new_df)

-----------------------

      a    b
    0  A    A
    1  B  NaN
    2  C    C
    3  D    D

根據您的示例,您似乎只想找出沒有完全匹配但保留排序順序的位置。 您可以通過以下方式實現:

df['b'] = df['a'].where(df['a'].isin(df['b']), '')

>>> df

   a  b
0  A  A
1  B   
2  D  D
3  C  C

>>>> df.query('a != b')

   a  b 
1  B       

暫無
暫無

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

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