#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, это прекрасно! Именно то, что мне было нужно, и я переношу это в функцию, ты потрясающий!