Rumah > pembangunan bahagian belakang > Tutorial Python > Gabung dari lebar ke panjang

Gabung dari lebar ke panjang

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2024-02-09 23:50:04
ke hadapan
758 orang telah melayarinya

Gabung dari lebar ke panjang

Kandungan soalan

Hai, saya cuba menggabungkan dua set data melalui:

df1=pd.dataframe({'company name':['a','b','c'],
               'analyst 1 name':['tom','mike',np.nan],
               'analyst 2 name':[np.nan,'alice',np.nan],
               'analyst 3 name':['jane','steve','alex']})

df2=pd.dataframe({'company name':['a','b','c'],
               'score 1':[3,5,np.nan],
               'score 2':[np.nan,1,np.nan],
               'score 3':[6,np.nan,11]})

df_desire=pd.dataframe({'company name':['a','a','b','b','b','c'],
               'analyst':['tom','jane','mike','alice','steve','alex'],
               'score':[3,6,5,1,np.nan,11]})
Salin selepas log masuk

Pada asasnya, df1 mengandungi nama penganalisis dan df2 mengandungi skor yang diberikan oleh penganalisis. Saya cuba menggabungkan kedua-duanya ke dalam df_desire. Kaedah membaca kedua-dua jadual tersebut ialah: bagi syarikat a, ia dilindungi oleh dua orang iaitu tom dan jane yang masing-masing memberikan 3 dan 6. Ambil perhatian bahawa walaupun steve meliputi syarikat b, saya dengan sengaja menyatakan skor sebagai na untuk tujuan keteguhan.

Apa yang saya lakukan ialah:

pd.concat([df1.melt(id_vars='company name',value_vars=['analyst 1 name','analyst 2 name','analyst 3 name']),\
           df2.melt(id_vars='company name',value_vars=['score 1','score 2','score 3'])],axis=1)
Salin selepas log masuk

Saya sedang mencari penyelesaian yang lebih elegan.


Jawapan Betul


Cuba:

x = (
    df1.set_index("company name")
    .stack(dropna=false)
    .reset_index(name="name")
    .drop(columns="company name")
)
y = df2.set_index("company name").stack(dropna=false).reset_index(name="score")

print(
    pd.concat([x, y], axis=1)[["company name", "name", "score"]]
    .dropna(subset=["name", "score"], how="all")
    .reset_index(drop=true)
)
Salin selepas log masuk

Cetakan:

  company name   name  score
0            A    Tom    3.0
1            A   Jane    6.0
2            B   Mike    5.0
3            B  Alice    1.0
4            B  Steve    NaN
5            C   Alex   11.0
Salin selepas log masuk

Atas ialah kandungan terperinci Gabung dari lebar ke panjang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan