Преобразование фрейма данных в список с некоторыми условиями

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня есть два фрейма данных, df и df2, как показано на следующем рисунке. Я хотел бы преобразовать df в список, как показано ниже. df2 сообщает, какие столбцы включать, когда df преобразуется в список. Как можно достичь цели? Большое спасибо в advanced.

 desired_output = [{'A': {'value': '10'}, 'B': {'value': '11'}}, {'B': {'value': '14'}, 'C': {'value': '15'}}, {'A': {'value': '16'}, 'B': {'value': '17'}, 'C': {'value': '18'}}]
  

введите описание изображения здесь

Комментарии:

1. Это звучит так, как будто это, возможно, проблема XY . Для чего вам нужен этот список?

2. синтаксис, который вы опубликовали, неверен

3. Я думаю, что опубликованный синтаксис является желаемым результатом. Я в замешательстве, хотя почему это желаемый результат

4. @noah опубликованный вывод вернет ошибку «Недопустимый синтаксис» в python.

5. Я не согласен с тем, что это неверно, я в равной степени смущен, почему это желаемый результат

Ответ №1:

Ввод — определение фреймов данных

 import pandas as pd
df1 = pd.DataFrame({'A': [10,13,16], 'B': [11,14,17], 'C':[12,15,18]} )
df1.index = ['a_0','a_1','a_2']
df2 = pd.DataFrame({'start_column': [0,1,0], 'end_column': [1,2,2]} )
df2.index = ['a_0','a_1','a_2']
  

Ввод фреймов данных:

       A   B   C
a_0  10  11  12
a_1  13  14  15
a_2  16  17  18
     start_column  end_column
a_0             0           1
a_1             1           2
a_2             0           2
  

Решение:

 def listofdict(j):
    d2 = {}
    x = j['start_column']
    y = j['end_column'] 1
    for i in range(x,y):
        d1 = {}
        d1['value'] = str(df1.loc[j.name][i])
        d2[df1.columns[i]] = d1
    l.append(d2)
    return l

l = []
df2.apply(lambda j:listofdict(j), axis=1).all()
print(l)
  

Желаемый результат:

 [{'A': {'value': '10'}, 'B': {'value': '11'}}, {'B': {'value': '14'}, 'C': {'value': '15'}}, {'A': {'value': '16'}, 'B': {'value': '17'}, 'C': {'value': '18'}}]
  

Комментарии:

1. помогает ли это @yeonhodev?