Циклический просмотр парного списка для объединения строк фрейма данных в python - PullRequest
1 голос
/ 06 апреля 2020

У меня есть фрейм данных, где все ячейки являются строками. Я хочу провести l oop через парный список и объединить строки фрейма данных.

Например, у меня есть фрейм данных, который выглядит следующим образом:

df=[['7','4','5','',''],["","","",'7','4'],['9','4','7','8','4'],["","","",'7','5'],['4','8','5','4','6'],['4','9','41','74','20'],['4','Super','yes','0','9']]
df=pd.DataFrame(df)
df.astype('str')
print(df)
0   1   2   3   4   
7   4   5           
            7   4
9   4   7   8   4
            7   5
4   8   5   4   6
4   9   41  74  20

Я хочу l oop через приведенный ниже список пар, где первый элемент является началом и второй конец.

list_index=[[1,3],[4,5]]

Это мое испытание. Я пытался изменить список на диапазон, чтобы я мог получить доступ к каждому урезанному элементу и l oop через них, но безуспешно бросил TypeError: 'list' object cannot be interpreted as an integer.

for row,index in df.iterrows():
    for i in range(len(list_index)):
        for j in range(list_index[i]):
            df[row,:] = df[row,:] + row 

Наконец, для начала и конца индексов, которые у меня есть выше, я хочу, чтобы итоговый фрейм данных выглядел так:

0   1   2   3   4   
7   4   5           
9   4   7   787 445
44  89  541 474 620

Я не уверен, как l oop через парные элементы списка в python. Кто-нибудь может мне помочь с этим?

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Вот еще одно решение без groupby

start_end = [[1,3],[4,5]]

new_df = pd.DataFrame()

for l in start_end:

    temp_df = df.iloc[l[0] : l[1] + 1,:].apply(lambda x : ''.join(x)).to_frame().transpose()

    new_df = pd.concat([new_df, temp_df], ignore_index = True)

new_df
1 голос
/ 06 апреля 2020
# this is an important step because we need a column to groupby
df['gb'] = 'gb'

start_end = [[1,3],[4,5]]

new_df = pd.DataFrame()

for l in start_end:

    temp_df = df.iloc[l[0] : l[1] + 1,:].groupby(['gb']).agg(lambda x : ''.join(x)).reset_index(drop = True)

    new_df = pd.concat([new_df, temp_df], ignore_index = True)

new_df
...