python - 按另一列的顺序对包含 NA 的一列中的值进行排序

标签 python pandas

我在 pandas 中有一个数据框

import pandas as pd

df=pd.DataFrame.from_dict({'col1':['A_2','A_1','A_3','A_4','A_6','A_5','A_8','A_7'],
'col2':['NaN','A_2','A_3','A_4','A_5','NaN','A_1','A_6']}, orient='index').T

我想更改第二列 col2 的顺序并更改它,以便两列中相同的项目像这样匹配:

       col1     col2
   0    A_2     A_2
   1    A_1     A_1
   2    A_3     A_3
   3    A_4     A_4
   4    A_6     A_6
   5    A_5     A_5
   6    A_7     NaN
   7    A_8     NaN

尝试:df.iloc[:,1].sort_values(df.iloc[:,0]) 仅返回有关不可散列系列的错误消息

假设现在有两个数据框:

df1:

df1=pd.DataFrame({'col1':['A_2','A_1','A_3','A_4','A_6','A_5','A_8','A_7'],
'col2':[0,1,1,0,0,1,1,0], 'col3':[1,6,7,5,4,3,9,8]})

df2=pd.DataFrame({'N1':['NaN','A_2','A_3','A_4','A_5','NaN','A_1','A_6'],
             'N2':['NaN',0,1,2,3,'NaN',0,1], 'N3':['NaN',0,0,0,0,'NaN',0,0]})

我想像上面一样排序,但这一次,df2中的所有列和行:

输出:

N1    N2    N3
A_2   0     0
A_1   0     0
A_3   1     0
A_4   2     0
A_6   1     0
A_5   3     0
NaN   NaN   NaN
NaN   NaN   NaN

最佳答案

如果我理解正确的话,当 col1 中的值存在于 col2 中时,您可以使用 col1 中的值重写 col2:

df.col2 = df.col1[df.col1.isin(df.col2)]

结果:

df
Out[13]: 
  col2 col1
0  A_2  A_2
1  A_1  A_1
2  A_3  A_3
3  A_4  A_4
4  A_6  A_6
5  A_5  A_5
6  NaN  A_8
7  NaN  A_7
<小时/>

编辑:使用两个数据框扩展问题

这隐含地假设 df2.N1 中的值是唯一的(NaN 值除外)。因此,我们可以使用它们作为索引,从 N2N3 中获取相应的值。然后我们可以使用 df1.col1 作为索引值:

In[53] : df2.set_index('N1', drop=False).loc[df1.col1]
Out[53]: 
      N1   N2   N3
N1                
A_2  A_2    0    0
A_1  A_1    0    0
A_3  A_3    1    0
A_4  A_4    2    0
A_6  A_6    1    0
A_5  A_5    3    0
A_8  NaN  NaN  NaN
A_7  NaN  NaN  NaN

您随时可以添加 .reset_index(drop=True) 来重置索引。

关于python - 按另一列的顺序对包含 NA 的一列中的值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37417889/

相关文章:

python - 如何从 pandas 数据框创建 scipy 稀疏矩阵?

python - 根据现有列值从 pandas 数据框中随机选择行子集

Python 绘制两个变量之间的每月数据

python - 二维 FFT 显示高于奈奎西极限的意外频率

python - 具有特定输出的 Elasticsearch DSL 查询

python - 属性错误: module 'statsmodels' has no attribute 'datasets'

python - 计算数据框列中列表的所有排列

python - 集合内的 drop_duplicates

Python - matplotlib 雨滴示例中的导入错误

Python 导入 XML SQLITE 简介 (xmltodict)