如何按值组合两个pandas数据帧

时间:2018-03-18 10:17:56

标签: python pandas

我有2个数据帧 - 玩家(只有playerid)和日期(只有日期)。我想要新的数据帧,每个日期都包含每个玩家。在我的情况下,玩家df包含大约2600行,而日期df包含1100行。我使用2 for循环来做这个,但它真的很慢,有没有办法通过一些功能更快地做到这一点? THX

我的循环:

player_elo = pd.DataFrame(columns = ['PlayerID','Date'])
for row in players.itertuples():
    idx = row.Index
    pl = players.at[idx,'PlayerID']
    for i in dates.itertuples():
        idd = row.Index
        dt = dates.at[idd, 0]
        new = {'PlayerID': [pl], 'Date': [dt]}
        new = pd.DataFrame(new)
        player_elo = player_elo.append(new)

1 个答案:

答案 0 :(得分:0)

如果您为<div id="wrapper"> <header> <a href="index.htm"><img src="http://lorempixel.com/50/50/sports" alt="logo"></a> <h1>Fysiohjälpen</h1> <h2>Snabbt och enkelt att hitta informationen du söker</h2> </header> <div id="searchbar"> <form class="" action="" method="post"> <input type="text" name="search" placeholder="Hitta information om symtom, behandling..."><input type="button" name="" value="Sök"> </form> </div> <nav id="globalnav"> <ul> <li><a href="index.htm" class="thisSection">Handbok</a></li> <li><a href="#">Länkar</a></li> <li><a href="#">Kontakt</a></li> </ul> </nav> <nav id="localnav"> <ul> <li><a href="#" class="thisSection">Rygg</a> <ul> <li><a href="#" id="thisPage">Diskbråck</a></li> <li><a href="#">Spinal stenos</a></li> <li><a href="#">Skolios</a></li> </ul> </li> <li><a href="#">Knä</a> <ul> <li><a href="#">Artros</a></li> <li><a href="#">Korsbandsskada</a></li> </ul> </li> <li><a href="#">Axel</a> <ul> <li><a href="#">Impingement</a></li> <li><a href="#">Instabila axeln</a></li> </ul> </li> </ul> </nav> <main> <article> <h2>Om diskbråck</h2> <img src="pics/disc.png" alt="ryggraden"> <h3 id="symtom">Symtom</h3> <p>Ett cervikalt diskbråck är en utbuktning av nucleus puposus genom ett brott i anulus fibrosus i en disk i nacken. Cervikal radikulopati är ett neurologiskt tillstånd som kännetecknas av dysfunktion av en cervikal spinalnerv, rötterna till nerven, eller båda. Flertalet patienter med symtomgivande cervikalt diskbråck har smärtor och/eller domningar som följer berörda myotom respektive dermatom. </p> <h3 id="behandling">Behandling</h3> <p>Undvik aktiviteter som ökar trycket i disken, det vill säga undvik aktiviteter som utlöser smärtor: Löpning, hoppning och liknande avrådes ifrån. Ensidiga ställningar av nacke och rygg bör undvikas</p> <p>Övningar i form av rörelseträning, styrkeövningar och aerobiska övningar används ofta vid cervikal radikulopati.</p> <h3 id="patientinformation">Patientinformation</h3> <p>Slitage eller skada på diskarna i nacken kan leda till ett diskbråck som trycker mot nerver som utgår från halsryggraden. Konsekvensen kan bli utstrålande smärtor i en arm och/eller nedsatt kraft i armen. I de flesta fall går bråcket tillbaka.</p> <p>De flesta som har diskbråck i nacken blir bra utan behandling. Visserligen kan besvären komma och gå, men hos många är obehaget plågsamt under en period för att senare aldrig komma tillbaka.</p> <p>Många klarar sig bra med milda smärtstillande läkemedel vid besvär. Ibland kan det vara aktuellt att använda starkare smärtstillande eller inflammationshämmande läkemedel (NSAID), som dämpar irritationen runt diskbråcket. Svullnaden går ned och det blir mer utrymme runt vävnaden. Diskbråcket trycker mindre på andra strukturer. Nackdelen med NSAID är att många får magbesvär av dem.</p> <p>Behandlingen beror på hur stort diskbråcket är. För de flesta gäller det att behandla sig själv genom att till exempel undvika aktiviteter som belastar nacken mycket. En bra regel är att inte göra saker som ger smärtor. Löpning, hoppning och liknande är det bra att vara försiktig med i början. Detsamma gäller ensidiga ställningar i nacke och rygg.</p> <h3 id="referenser">Referenser</h3> <p>Carette S and Fehlings MG. Cervical radiculopathy. N Engl J Med 2005; 353: 392-9.</p> <p>Eubanks JD. Cervical radiculopathy: Nonoperative management of neck pain and radicular symptoms. Am Fam Physician 2010; 81: 33-40.</p> </article> <div class="sidebar sticky"> <section> <h2>Genväg till innehåll</h2> <nav id="articlemenu"> <ul> <li><a href="#symtom">Symtom</a></li> <li><a href="#behandling">Behandling</a></li> <li><a href="#patientinformation">Patientinformation</a></li> <li><a href="#referenser">Referenser</a></li> </ul> </nav> </section> </div> </main> <footer> &copy; Tobias Andersson 2018-03-04 </footer> </div>重复了key,则可以使用df找出您要查找的笛卡尔积。

pd.merge()

<强>输出

import pandas as pd

players = pd.DataFrame([['A'], ['B'], ['C']], columns=['PlayerID'])

dates = pd.DataFrame([['12/12/2012'],['12/13/2012'],['12/14/2012']], columns=['Date'])
dates['Date'] = pd.to_datetime(dates['Date'])

players['key'] = 1
dates['key'] = 1
print(pd.merge(players, dates,on='key')[['PlayerID', 'Date']])