我是熊猫和我的新手,我在寻找排序和比较栏,但我想排序字符串。我想排序字符串,留下空的空间,就像你有什么想法吗,伙计?我想用下面的代码做点什么,但是我不知道接下来该怎么做。
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发布于 2019-10-09 12:33:46
您需要使用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如果要按字典顺序排序,则需要首先根据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此外,您还可以在sort = False中使用DataFrame.merge。
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发布于 2019-10-09 13:34:58
根据您的例子,您似乎只想找出哪里没有确切的匹配,但保留排序顺序。您可以使用以下方法来实现:
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 https://stackoverflow.com/questions/58303727
复制相似问题