Добавление списка в столбец при переборе строки данных - PullRequest
0 голосов
/ 22 марта 2020

У меня есть следующий фрейм данных:

import numpy as np
import pandas as pd
import random
df = pd.DataFrame(np.random.randint(0,20,size=(2, 2)), columns=list('AB'))
df

    A   B
0   13  4
1   16  17

Затем я создаю еще один фрейм данных в al oop, где столбцы фрейма данных являются списками. Здесь есть сообщение (Pandas разделить столбец списков на несколько столбцов ), в котором показано разделение столбцов.

tmp_lst_1 = []
for index, row in df.iterrows():
    tmp_lst_2 = []
    for r in range(len(row)):
        tmp_lst_2.insert(r, random.sample(range(1, 50), 2) )
    tmp_lst_1.insert(index, tmp_lst_2)

df1 = pd.DataFrame(tmp_lst_1)
df1
     0             1
0   [21, 5]     [6, 42]
1   [49, 40]    [8, 45]

, но мне было интересно, есть ли более эффективный способ создать этот фрейм данных без необходимости разбивать все столбцы по отдельности? Я ищу что-то вроде этого:

df1
    C  D  E F  
0   21 5  6 42
1   49 40 8 45

1 Ответ

0 голосов
/ 22 марта 2020

Я думаю, что l oop от DataFrame.iterrows здесь не требуется, вы можете использовать понимание вложенных списков с сплющивающими списками :

df = pd.DataFrame(np.random.randint(0,20,size=(2, 2)), columns=list('AB'))

tmp_lst_1 = [[x for r in range(len(df.columns)) 
                for x in random.sample(range(1, 50), 2)] 
                for i in range(len(df))]

df1 = pd.DataFrame(tmp_lst_1, index=df.index)
print (df1)
    0   1   2   3
0  23  24  42  48
1  26  43  24   5

Альтернатива без понимания списка:

tmp_lst_1 = []

for i in range(len(df)):
    flat_list = []
    for r in range(len(df.columns)):
        for x in random.sample(range(1, 50), 2):
            flat_list.append(x)
    tmp_lst_1.append(flat_list)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...