我在 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
值除外)。因此,我们可以使用它们作为索引,从 N2
和 N3
中获取相应的值。然后我们可以使用 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/