Ich habe etwas Code geschrieben, um die IDs von zwei Datenrahmen abzubilden, und wenn eine Bedingung übereinstimmt, dann eine Zählung in einer angegebenen Spalte im vorhandenen Datenrahmen zu erstellen, suche ich nach einem effizienteren Art der Berechnung.Pandas, Karte zwei Datenrahmen, Zählung basiert auf Bedingung
Beispieldaten
import numpy as np
import pandas as pd
d = {'ID' : pd.Series([111, 222, 111, 444, 222, 111]), 'Tag' : pd.Series([1, 2, 3, 1, 2, 1])}
df1 = (pd.DataFrame(d))
print(df1)
ID Tag
0 111 1
1 222 2
2 111 3
3 444 1
4 222 2
5 111 1
d = {'ID' : pd.Series([111, 444, 666, 444, 777])}
df2 = (pd.DataFrame(d))
print(df2)
ID
0 111
1 444
2 666
3 444
4 777
df2['tag1'] = 0
df2['tag2'] = 0
df2['tag3'] = 0
for index, row in df2.iterrows():
for i, t in df1.iterrows():
if row['ID'] == t['ID']:
if t['Tag'] == 1:
df2.loc[index]["tag1"] += 1
elif t['Tag'] == 2:
df2.loc[index]["tag2"] += 1
elif t['Tag'] == 3:
df2.loc[index]["tag3"] += 1
Ausgabe
print(df2)
ID tag1 tag2 tag3
0 111 2 0 1
1 444 1 0 0
2 666 0 0 0
3 444 1 0 0
4 777 0 0 0
Was ist der effizienteste Weg, dies zu tun, anstatt iterativ Berechnung?
Hinweis kann df1 enthält die Probe ID
mehrere Male mit einem anderen Wert von Tag
(DF1 und DF2 sind große Datenrahmen, mit 50.000 Zeilen in DF1 und 15.000 in DF2)
Dank für eine schnelle Antwort @jezrael – user3939059
Gut, dass Sie helfen können, viel Glück! – jezrael