Мне нужно «продублировать» элементы DataFrame
столько раз, сколько элементов в коллекции (скажем, список, чтобы упростить его).Это может быть трудно объяснить словами, поэтому я покажу свой код:
In [1]: data = {char: [] for char in 'abcd'}
In [2]: n = 3
In [3]: properties = [i for i in range(1, n + 1)]
In [4]: l = list(range(1, 11))
In [5]: for e in l:
...: data['a'].append(e + e)
...: data['b'].append(e * e)
...: data['c'].append(e ** e)
...: data['d'].append(1.0 / e)
...:
In [6]: df = pd.DataFrame(data)
In [7]: df
Out[7]:
a b c d
0 2 1 1 1.000000
1 4 4 4 0.500000
2 6 9 27 0.333333
3 8 16 256 0.250000
4 10 25 3125 0.200000
5 12 36 46656 0.166667
6 14 49 823543 0.142857
7 16 64 16777216 0.125000
8 18 81 387420489 0.111111
9 20 100 10000000000 0.100000
в зависимости от свойств, мне нужно создать следующее DataFrame
:
a b c d property
0 2 1 1 1.000000 1
1 4 4 4 0.500000 1
2 6 9 27 0.333333 1
3 8 16 256 0.250000 1
4 10 25 3125 0.200000 1
5 12 36 46656 0.166667 1
6 14 49 823543 0.142857 1
7 16 64 16777216 0.125000 1
8 18 81 387420489 0.111111 1
9 20 100 10000000000 0.100000 1
10 2 1 1 1.000000 2
11 4 4 4 0.500000 2
12 6 9 27 0.333333 2
13 8 16 256 0.250000 2
14 10 25 3125 0.200000 2
15 12 36 46656 0.166667 2
16 14 49 823543 0.142857 2
17 16 64 16777216 0.125000 2
18 18 81 387420489 0.111111 2
19 20 100 10000000000 0.100000 2
20 2 1 1 1.000000 3
21 4 4 4 0.500000 3
22 6 9 27 0.333333 3
23 8 16 256 0.250000 3
24 10 25 3125 0.200000 3
25 12 36 46656 0.166667 3
26 14 49 823543 0.142857 3
27 16 64 16777216 0.125000 3
28 18 81 387420489 0.111111 3
29 20 100 10000000000 0.100000 3
, котороеповторить мой массив данных в зависимости от количества элементов в свойствах и добавив свойство столбца.В настоящее время я использую вложенные циклы с двумя циклами, чтобы добиться этого следующим образом:
new_data = {'a': [], 'b': [], c: [], d: [], 'property': []}
properties = [1, 2, 3]
for property_id in properties:
for e in l:
new_data['property'].append(property_id)
new_data['a'].append(e + e)
new_data['b'].append(e * e)
new_data['c'].append(e ** e)
new_data['d'].append(1.0 / e)
new_df = pd.DataFrame(new_data)
Однако я надеюсь, что есть способ упростить эту логику, просто используя свой оригинальный словарь data
или df
и дублируя фрейм как можно больше свойств.
Основная цель этой проблемы - улучшить производительность этой логики.