У меня есть следующий фрейм данных, и я хочу снять его, получив серию x
и серию y
с time
в качестве индекса и value
в качестве данных:
var time value
0 x 0 11
1 y 0 123
2 x 1 12
3 y 1 124
4 x 2 13
5 y 2 125
Это мой код:
import pandas as pd
df = pd.DataFrame({
'time': [0,0,1,1,2,2],
'var': list('xyxyxy'),
'value': [11,123,12,124,13,125]})
for col in ['x', 'y']:
s = pd.Series(
data=df.loc[df['var'] == col, 'value'],
index=df.loc[df['var'] == col, 'time'],
name=col)
print(s)
Это вывод:
time
0 11.0
1 NaN
2 12.0
Name: x, dtype: float64
time
0 NaN
1 123.0
2 NaN
Name: y, dtype: float64
Но я ожидаю, что сериал будет
time
0 11.0
1 12.0
2 13.0
Name: x, dtype: float64
time
0 123.0
1 124.0
2 125.0
Name: y, dtype: float64
Очевидно, что панды неправильно совмещают ось time
с осью value
. Насколько я понимаю, каждый .loc
должен просто вернуть соответствующие 3 элемента и собрать их вместе в качестве индекса и данных для вновь созданного ряда.
- Почему этого не происходит?
- Какой самый простой способ получить желаемый результат?