我是 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
关于python - 在Excel文件中用字符串对列进行排序[使用python,pandas],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58303727/