Python 根据列索引添加行
我有一个dataframe,它有以下列:Python 根据列索引添加行,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有一个dataframe,它有以下列: id index1 index2 value DivA 1 4 3 DivA 3 6 4 DivB 1 3 5 DivB 5 7 3 在另一个数据帧上,我有以下内容: id index DivA 1 DivA 2 ... Di
id index1 index2 value
DivA 1 4 3
DivA 3 6 4
DivB 1 3 5
DivB 5 7 3
在另一个数据帧上,我有以下内容:
id index
DivA 1
DivA 2
...
DivA 10
DivB 1
...
最终结果:
df2:
我想知道是否可以用'index1'和'index2'的方式向第二个df添加一个新列'value'
如果第一个数据帧“value”中没有值,则第二个df中的“value”可以有“nan”
谢谢你的帮助 使用df.melt('id')检查它将三列合并为一列,我要寻找的是我将'index1'和'index2'转换为'index',其中两列中缺少的值有一个nan,有什么想法吗?它可以工作,我发现pd.melt在很多任务中非常有用,但需要一些时间来理解这个概念,谢谢!
#pd.melt first dataframe
df3=pd.melt(df, id_vars=['id','value'], value_vars=['index1', 'index2'], value_name='index').drop(columns=['variable'])
#pd.concat second dataframe to the pd.met result, sort-values and drop duplicates in index
(pd.concat([df3, df1], ignore_index=True).sort_values(by=['id','index'])).drop_duplicates(subset=['index'],keep='first')
id value index
0 DivA 3.0 1
9 DivA NaN 2
1 DivA 4.0 3
4 DivA 3.0 4
5 DivA 4.0 6
10 DivA NaN 10
3 DivB 3.0 5
7 DivB 3.0 7
#pd.melt first dataframe
df3=pd.melt(df, id_vars=['id','value'], value_vars=['index1', 'index2'], value_name='index').drop(columns=['variable'])
#pd.concat second dataframe to the pd.met result, sort-values and drop duplicates in index
(pd.concat([df3, df1], ignore_index=True).sort_values(by=['id','index'])).drop_duplicates(subset=['index'],keep='first')
id value index
0 DivA 3.0 1
9 DivA NaN 2
1 DivA 4.0 3
4 DivA 3.0 4
5 DivA 4.0 6
10 DivA NaN 10
3 DivB 3.0 5
7 DivB 3.0 7