首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用excel文件中的字符串对列进行排序[使用python、大熊猫]

用excel文件中的字符串对列进行排序[使用python、大熊猫]
EN

Stack Overflow用户
提问于 2019-10-09 12:03:18
回答 2查看 257关注 0票数 2

我是熊猫和我的新手,我在寻找排序和比较栏,但我想排序字符串。我想排序字符串,留下空的空间,就像你有什么想法吗,伙计?我想用下面的代码做点什么,但是我不知道接下来该怎么做。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-09 12:33:46

您需要使用Series.map找到系列b的正确顺序。最后使用Series.replace替换

代码语言:javascript
复制
df['b']=df['a'].map(pd.Series(df.index,df['b'].values)).replace(df['b'])
print(df)
代码语言:javascript
复制
   a    b
0  A    A
1  B  NaN
2  D    D
3  C    C

如果要按字典顺序排序,则需要首先根据a列使用进行排序。

代码语言:javascript
复制
df=df.sort_values('a')
df['b']=df['a'].map(pd.Series(df.index,df['b'].values)).replace(df['b'])
print(df)
代码语言:javascript
复制
   a    b
0  A    A
1  B  NaN
3  C    C
2  D    D

此外,您还可以在sort = False中使用DataFrame.merge

代码语言:javascript
复制
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)
代码语言:javascript
复制
  a    b
0  A    A
1  B  NaN
2  D    D
3  C    C

或使用sort = True

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2019-10-09 13:34:58

根据您的例子,您似乎只想找出哪里没有确切的匹配,但保留排序顺序。您可以使用以下方法来实现:

代码语言:javascript
复制
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       
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58303727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档