[英]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.repeat
和DataFrame.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.