Pandas разделяет значения строки на две разные строки

#python #pandas #dataframe

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

Вопрос:

У меня есть фрейм данных с тремя строками. Я хотел бы взять половину из средней строки и добавить ее сверху и снизу. Пример фрейма данных ниже:

 data = {'A':  [3, 2, 4],
        'B': [3, 5, 4]}

df = pd.DataFrame(data, columns = ['A','B'])
  

Из этого фрейма данных, как бы я мог разделить вторую строку (A: 2, B: 5) на другие строки, чтобы результат был

 data_output = {'A':  [4, 5],
        'B': [5.5, 6.5]}

df_output = pd.DataFrame(data_output, columns = ['A','B'])
  

Мои текущие мысли состоят в том, чтобы разделить строку, которая на 2 добавляется к другим добавлениям строк и подмножеству.

 x = df.loc[0, ]   df.loc[1, ]/2
y = df.loc[2, ]   df.loc[1, ]/2

df2 = df.append([x, y], ignore_index=True)
df2.loc[3:]
  

Однако, если бы я хотел сохранить гораздо больший фрейм данных или работать с несколькими экземплярами, это кажется неэффективным. Есть мысли, как разделить значение строки и добавить разделенные значения в строку над и под ней?

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

1. Вы хотите разделить только 2-ю строку на две половины и назначить одну часть 1-й, а другую — 3-й?

2. Привет @JoeFerndz, в этом примере да, код в третьем блоке делает это, но это кажется очень неэффективным способом

Ответ №1:

Вы можете попробовать это, если эта операция выполняется в одной строке:

 row = 1 #index
df.update(df.loc[[row-1,row 1]].add(df.loc[row].div(2)))
out = df.drop(row).reset_index(drop=True)
  

 print(out)

     A    B
0  4.0  5.5
1  5.0  6.5
  

Или для копии вместо того, чтобы манипулировать исходным df:

 row = 1
(df.loc[[row-1,row 1]].add(df.loc[row].div(2)).reindex(df.index)
                   .fillna(df).drop(row).reset_index(drop=True))
  

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

1. Спасибо @anky, это прекрасно! Именно то, что мне было нужно, и я переношу это в функцию, ты потрясающий!