Мне нужно добавить измененные копии своих собственных строк в фрейм данных в соответствии с отдельной таблицей, но он должен работать на миллионах строк, и у меня возникают проблемы при его оптимизации.
У меня есть фрейм данных dfгде один идентификатор - это определенный столбец 'myIndex'
df=pd.DataFrame([
{'myIndex':1,'dummyData':2,'type':'test'},
{'myIndex':1,'dummyData':3,'type':'test'},
{'myIndex':1,'dummyData':4,'type':'other'},
{'myIndex':2,'dummyData':22,'type':'test'},
{'myIndex':2,'dummyData':32,'type':'test'},
{'myIndex':2,'dummyData':42,'type':'other'},
{'myIndex':3,'dummyData':23,'type':'test'},
{'myIndex':3,'dummyData':33,'type':'test'},
{'myIndex':3,'dummyData':43,'type':'other'}
])
Я должен продублировать его строки в соответствии с таблицей в другом фрейме данных
repeatedRows=pd.DataFrame([
{'myIndex':1,'idx2':21},
{'myIndex':1,'idx2':31},
{'myIndex':1,'idx2':42},
{'myIndex':2,'idx2':221},
{'myIndex':2,'idx2':231},
{'myIndex':2,'idx2':242},
{'myIndex':3,'idx2':321},
{'myIndex':3,'idx2':331},
{'myIndex':4,'idx2':342}
])
Таким образом, строка df, myIndex которой появляется в repeatRowsдолжно быть реплицировано с «myIndex» заменено на idx2, а «type» заменено на «duplicate».Это моя последняя попытка:
import pandas as pd
pd.options.mode.chained_assignment = None # Avoid annoying warning
def Test1(df,repeatedRows):
for idx in set(repeatedRows['myIndex']):
vals=df[df['myIndex']==idx]
for n in repeatedRows[repeatedRows['myIndex']==idx].loc[:,'idx2']:
vals.loc[:,'myIndex']=n
vals.loc[:,'type']='duplicate'
df=pd.concat([df,vals],ignore_index=True)
return df
Это ожидаемый результат:
untitled0.Test1()
Out[44]:
dummyData myIndex type
0 2 1 test
1 3 1 test
2 4 1 other
3 22 2 test
4 32 2 test
5 42 2 other
6 23 3 test
7 33 3 test
8 43 3 other
9 2 21 duplicate
10 3 21 duplicate
11 4 21 duplicate
12 2 31 duplicate
13 3 31 duplicate
14 4 31 duplicate
15 2 42 duplicate
16 3 42 duplicate
17 4 42 duplicate
18 22 221 duplicate
19 32 221 duplicate
20 42 221 duplicate
21 22 231 duplicate
22 32 231 duplicate
23 42 231 duplicate
24 22 242 duplicate
25 32 242 duplicate
26 42 242 duplicate
27 23 321 duplicate
28 33 321 duplicate
29 43 321 duplicate
30 23 331 duplicate
31 33 331 duplicate
32 43 331 duplicate
Я реализовал это несколькими различными способами, но это все еще занимает много времени, я думаю,Я делаю что-то очень неэффективное, или не в полной мере пользуюсь пандами.Любой совет будет высоко ценится.