[英]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.merge和sort = 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.