我有两个数据框,如下所示。我想创建一个新的数据框,其中必须根据 df2 行的长度复制 df1 列,然后必须将行的每个值附加为新行,如下所示异常(exception)输出的呈现方式。我尝试连接两个数据帧,然后用于实现异常输出,但返回空数据帧。有没有最好的方法来获得异常(exception)的输出?
数据框:-
将 pandas 导入为 pd
data = [10,20,30,40,50,60]
df1 = pd.DataFrame(data, columns=['Numbers'])
df1
Numbers
0 10
1 20
2 30
3 40
4 50
5 60
data = {'name':['pro','lop1','lo','p','ll','qi'],'name2':['pro2','lop2','lol','po','llop','qiij'],
'names':['pro1','lop3','lol1','ppp','lop','qis']}
df2 = pd.DataFrame(data)
df2
name name2 names
0 pro pro2 pro1
1 lop1 lop2 lop3
2 lo lol lol1
3 p po ppp
4 ll llop lop
5 qi qiij qis
代码:-
new_df=pd.concat([df1,df2],axis=1)
final = (pd.wide_to_long(new_df,stubnames=['Names'], i=['Numbers'],
j='drop').reset_index().drop('drop', 1))
print(final)
Numbers names name name2 Names
(给出空数据框)
异常输出:-
Numbers Name
10 pro
10 pro2
10 pro1
20 lop1
20 lop2
20 lop3
30 lo
30 lol
30 lol1
40 p
40 po
40 ppp
50 ll
50 llop
50 lop
60 qi
60 qiij
60 qis
最佳答案
使用concat
与 DataFrame.set_index
和 DataFrame.stack
,最后删除 Multiindex 的第二层并创建 2 列 DataFrame:
new_df = (pd.concat([df1,df2],axis=1)
.set_index('Numbers')
.stack()
.droplevel(1)
.reset_index(name='Name'))
或者使用DataFrame.melt
,那么需要按 DataFrame.sort_values
排序:
new_df = (pd.concat([df1,df2],axis=1)
.melt('Numbers', value_name='Name')
.drop('variable', axis=1)
.sort_values('Numbers', ignore_index=True, kind='mergesort'))
print (new_df)
Numbers Name
0 10 pro
1 10 pro2
2 10 pro1
3 20 lop1
4 20 lop2
5 20 lop3
6 30 lo
7 30 lol
8 30 lol1
9 40 p
10 40 po
11 40 ppp
12 50 ll
13 50 llop
14 50 lop
15 60 qi
16 60 qiij
17 60 qis
关于python - 有什么方法可以从两个数据帧创建一个新的数据帧,其中一个 df 的每一行都必须重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73359962/