我在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
答案 0 :(得分:2)
如果我理解正确,您可以使用20130901
20121001
20131101
中的值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
来重置索引。