簡體   English   中英

Pandas Dataframe,使用 Pandas 在 Python 中為每一行添加包含數據范圍的新列

[英]Pandas Dataframe, add new column with range of data for each row in Python using Pandas

我有一個帶有單列的 dataframe,我想為 0-23 小時但為每一行創建一個名為“Hour”的新列。

當前的:

AN_LOG_ID
00000001
00000002
00000003

所需的 output:(每行每天每小時 0-23)

AN_LOG_ID    HOUR
00000001      0
00000001      1
...          ...
00000001      23
00000002      0
00000002      1
...          ...
00000002      23
00000003      0
00000003      1
...          ...
00000003      23
>>> df = df.assign(HOUR=[range(24)] * len(df)).explode("HOUR", ignore_index=True)
>>> df

   AN_LOG_ID HOUR
0   00000001    0
1   00000001    1
2   00000001    2
3   00000001    3
4   00000001    4
..       ...  ...
67  00000003   19
68  00000003   20
69  00000003   21
70  00000003   22
71  00000003   23

[72 rows x 2 columns]

首先將range(24)分配給每一行作為“HOUR”,然后展開該“HOUR”列以在其自己的行上展開小時數。 (ignore_index=True 使結果索引為 0, 1, 2, ...)

我們可以使用Index.repeat然后使用groupby.cumcount來獲取您的HOUR列:

df = df.loc[df.index.repeat(24)]
df = df.assign(HOUR=df.groupby(level=0).cumcount()).reset_index(drop=True)
    N_LOG_ID  HOUR
0   00000001     0
1   00000001     1
2   00000001     2
3   00000001     3
4   00000001     4
..       ...   ...
67  00000003    19
68  00000003    20
69  00000003    21
70  00000003    22
71  00000003    23

使用交叉merge

out = df.merge(pd.DataFrame({'HOUR': range(24)}), how='cross')

Output:

   AN_LOG_ID  HOUR
0   00000001     0
1   00000001     1
2   00000001     2
3   00000001     3
4   00000001     4
..       ...   ...
67  00000003    19
68  00000003    20
69  00000003    21
70  00000003    22
71  00000003    23

[72 rows x 2 columns]

另一種可能的解決方案,基於numpy

pd.DataFrame(
    np.concatenate(
        (np.repeat(df.values, 24).reshape(-1,1),
         np.tile(np.arange(24), len(df)).reshape(-1,1)), axis=1), 
    columns=['AN_LOG_ID', 'HOUR'])

Output:

   AN_LOG_ID HOUR
0   00000001    0
1   00000001    1
2   00000001    2
3   00000001    3
4   00000001    4
..       ...  ...
67  00000003   19
68  00000003   20
69  00000003   21
70  00000003   22
71  00000003   23

暫無
暫無

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

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