Я работаю над набором данных, где я откладываю данные и получаю первую и последнюю строки.
>>> print df.iloc[[(0), (-1)]]
Distance
Node 0 1 2
Time
0 27.0 54.0 97.0
60 22.0 49.0 92.0
то я использую df1 = (df.loc[0] - df.iloc[(-1)]).unstack()
чтобы получить разность двух строк
Node 0 1 2
Distance 5.0 5.0 5.0
И, наконец, я хочу объединить/объединить два набора данных (df
и df1
).
>>> print pd.concat([df, df1], axis=1)
(Distance, 0) (Distance, 1) (Distance, 2)
0 27.0 54.0 NaN
60 22.0 49.0 92.0
Distance NaN NaN NaN
но я получаю NaN
.
Кто-нибудь знает, что я делаю неправильно?
Я хочу, чтобы мой вывод выглядел так
Distance
Node 0 1 2
Time
0 27.0 54.0 97.0
60 22.0 49.0 92.0
Difference 5.0 5.0 5.0
На мой взгляд, использование unstack
не требуется для того, чего вы пытаетесь достичь. Ниже приведены несколько альтернатив. Чтобы упростить форматирование, я пропустил имена индексов и столбцов.
df = pd.DataFrame({0: [27.0, 22.0], 1: [54.0, 49.0], 2: [97.0, 92.0]},
index=[0, 60])
print(df)
0 1 2
0 27.0 54.0 97.0
60 22.0 49.0 92.0
Добавьте новую строку по индексу через pd.DataFrame.loc
с меткой строки.
df.loc['Distance'] = df.loc[0] - df.iloc[-1]
Преобразуйте свою серию разностей в кадр данных, затем транспонируйте и объедините.
diff = (df.loc[0] - df.iloc[-1]).to_frame().T
diff.index = ['Distance']
res = pd.concat([df, diff])
Результат
Результат для обоих методов:
print(res)
0 1 2
0 27.0 54.0 97.0
60 22.0 49.0 92.0
Distance 5.0 5.0 5.0