[英]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.