Gabung dari lebar ke panjang

WBOY
Lepaskan: 2024-02-09 23:50:04
ke hadapan
682 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!

sumber:stackoverflow.com
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!