#python #pandas #dataframe #join
#python #pandas #фрейм данных #Присоединиться
Вопрос:
я пытаюсь сделать следующее с этим фреймом данных
a b c d
0 1 2 3 4
1 10 20 30 40
2 100 200 300 400
3 1000 2000 3000 4000
4 10000 20000 30000 40000
5 100000 200000 300000 400000
желаемый выходной
список фреймов данных
df1:
1 10 100 1000
10 100 1000 10000
100 1000 10000 100000
df2:
2 20 200 2000
20 200 2000 20000
200 2000 20000 200000
df3:
3 30 300 3000
30 300 3000 30000
300 3000 30000 300000
window_size=3
overlap = 50
stride = int(window_size/(100/overlap))
ndf = pd.DataFrame()
for i in range(df.shape[1]):
column = df.iloc[:,i:1 i]
for j in range(df.shape[0]-2):
window = column.iloc[stride*j:window_size stride*j,:]
ndf = ndf.append(window)
print(ndf)
я не смог получить фреймы данных ndf. вместо этого я получаю это:
a
0 1
1 10
2 100
1 10
2 100
3 1000
2 100
3 1000
4 10000
3 1000
4 10000
5 100000
как я могу объединить мой window
в новый фрейм данных для этого столбца данных?
Спасибо
Комментарии:
1. В чем здесь логика? Это типичная проблема XY , вы спрашиваете, почему ваше решение не работает, вместо того, чтобы спрашивать о вашей исходной проблеме
Ответ №1:
Вы можете использовать DataFrame.rolling
с pd.concat
:
Примечание: этот метод должен pandas >= 1.1.0
иметь возможность перебирать rolling
объекты, см. Этот PR
for col in df.columns:
d = pd.concat(
[i.reset_index(drop=True) for i in df[col].rolling(3) if len(i) > 2],
axis=1
)
d.columns = list(range(d.shape[1]))
print(d)
0 1 2 3
0 1 10 100 1000
1 10 100 1000 10000
2 100 1000 10000 100000
0 1 2 3
0 2 20 200 2000
1 20 200 2000 20000
2 200 2000 20000 200000
0 1 2 3
0 3 30 300 3000
1 30 300 3000 30000
2 300 3000 30000 300000
0 1 2 3
0 4 40 400 4000
1 40 400 4000 40000
2 400 4000 40000 400000