簡體   English   中英

使用列范圍擴展熊貓數據框

[英]Expanding pandas dataframe with column range

我有一個 Pandas 數據框,其列范圍和字符串與此類似:

     STREET             LOWADD  HIGHADD POSTAL  SECTOR
0   ABBERLY CIR         1900    2000    23112   A6
1   ABBEY VILLAGE CIR   500     600     23114   B6

我需要在 LOWADD 和 HIGHADD 列之間將其擴展/轉換為以下內容,並向前填充 STREET、POSTAL 和 SECTOR 中的數據:

New_Street              POSTAL  SECTOR
1901 ABBERLY CIR        23112   A6
1902 ABBERLY CIR        23112   A6
1903 ABBERLY CIR        23112   A6
1904 ABBERLY CIR        23112   A6
1905 ABBERLY CIR        23112   A6

用熊貓做到這一點的最佳方法是什么?

想法是按Series.sub減去重復行數的列,然后按Index.repeatDataFrame.loc重復,最后按GroupBy.cumcount添加計數器 Series 到Street列:

df = df.reset_index(drop=True)
diff = df['HIGHADD'].sub(df['LOWADD'])
df = df.loc[df.index.repeat(diff)]
s = df.groupby(level=0).cumcount().add(1).add(df['LOWADD']).astype(str)
df['STREET'] = s + ' ' + df['STREET']
df = df.drop(['LOWADD','HIGHADD'], axis=1).reset_index(drop=True)
print (df)
                    STREET  POSTAL SECTOR
0         1901 ABBERLY CIR   23112     A6
1         1902 ABBERLY CIR   23112     A6
2         1903 ABBERLY CIR   23112     A6
3         1904 ABBERLY CIR   23112     A6
4         1905 ABBERLY CIR   23112     A6
..                     ...     ...    ...
195  596 ABBEY VILLAGE CIR   23114     B6
196  597 ABBEY VILLAGE CIR   23114     B6
197  598 ABBEY VILLAGE CIR   23114     B6
198  599 ABBEY VILLAGE CIR   23114     B6
199  600 ABBEY VILLAGE CIR   23114     B6

[200 rows x 3 columns]

暫無
暫無

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

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