簡體   English   中英

如何跨步連接行(軸= 1)?

[英]How to concat rows(axis=1) with stride?

例子:

import pandas as pd

test = {
    't':[0,1,2,3,4,5], 
    'A':[1,1,1,2,2,2], 
    'B':[9,9,9,9,8,8], 
    'C':[1,2,3,4,5,6]
   }

df = pd.DataFrame(test)
df

在此處輸入圖像描述

嘗試使用 window 和 concat:

window_size = 2

for row_idx in range(df.shape[0] - window_size):
    print(
        pd.concat(
            [df.iloc[[row_idx]],
             df.loc[:, df.columns!='t'].iloc[[row_idx+window_size-1]],
             df.loc[:, df.columns!='t'].iloc[[row_idx+window_size]]],
            axis=1
        )
    )

但是像這樣弄錯 dataframe :

在此處輸入圖像描述

是否可以使用滑動 window 來連接數據?

在此處輸入圖像描述

pd.concat正在調整索引,因此您必須確保它們適合。 您可以嘗試以下操作:

window_size = 2
dfs = []
for n in range(window_size + 1):
    sdf = df.iloc[n:df.shape[0] - window_size + n]
    if n > 0:
        sdf = (
            sdf.drop(columns="t").rename(columns=lambda c: f"{c}_{n}")
            .reset_index(drop=True)
        )
    dfs.append(sdf)
res = pd.concat(dfs, axis=1)

示例結果:

   t  A  B  C  A_1  B_1  C_1  A_2  B_2  C_2
0  0  1  9  1    1    9    2    1    9    3
1  1  1  9  2    1    9    3    2    9    4
2  2  1  9  3    2    9    4    2    8    5
3  3  2  9  4    2    8    5    2    8    6

看看下面這個例子:

    df1 = pd.DataFrame([['a', 1], ['b', 2]],
                   columns=['letter', 'number'])
    df4 = pd.DataFrame([['bird', 'polly'], ['monkey','george']],
                       columns=['animal', 'name'])
    pd.concat([df1, df4], axis=1)
    # Returns the following output
      letter  number  animal    name
    0      a       1    bird   polly
    1      b       2  monkey  george

它取自以下pandas 文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM