[英]Pandas - Match List Values to Index within a Dataset Name and List Value to New Column
我有一个像这样的熊猫数据框:
Dataset Volume_ft3
Sonar_Raster_0.tif 2055
Sonar_Raster_1.tif 6784
Sonar_Raster_FocalMean_5x5_0.tif 2045
Sonar_Raster_FocalMean_5x5_1.tif 6752
我想添加一个名为“Sonar_Points”的新列,它根据数据集名称中的唯一数字标识符将列表中的值匹配到数据集。
我的列表是 [5525,4374] ,我需要在数据集名称中查找索引号,将其与列表索引匹配,然后将该值输出到新列中,并将其输出到结果数据框的位置:
Dataset Volume_ft3 Sonar_Points
Sonar_Raster_0.tif 2055 5525
Sonar_Raster_1.tif 6784 4374
Sonar_Raster_FocalMean_5x5_0.tif 2045 5525
Sonar_Raster_FocalMean_5x5_1.tif 6752 4374
我已经尝试了下面的代码,但它没有考虑具有相同索引的数据集。
df = df.append(pd.DataFrame(Sonar_pts_List, columns=['Sonar_Points']),ignore_index=False)
一种使用pandas.Series.str.extract
的方法。
注意:如果有超过列表长度的索引,这将失败。
l = [5525, 4374]
df["Sonar_Points"] = [l[i] for i in
df["Dataset"].str.extract("_(\d+)\.", expand=False).astype(int)]
print(df)
输出:
Dataset Volume_ft3 Sonar_Points
0 Sonar_Raster_0.tif 2055 5525
1 Sonar_Raster_1.tif 6784 4374
2 Sonar_Raster_FocalMean_5x5_0.tif 2045 5525
3 Sonar_Raster_FocalMean_5x5_1.tif 6752 4374
您可以将数据集标识符提取到单独的列中,然后使用它将数据与声纳点值列表merge
:
df['spi'] = df['Dataset'].str.extract(r'_(\d+)\.').astype(int)
df = df.merge(pd.DataFrame(l, columns=['Sonar_Points']), left_on='spi', right_index=True).drop('spi', axis=1).sort_index()
输出:
Dataset Volume_ft3 Sonar_Points
0 Sonar_Raster_0.tif 2055 5525
1 Sonar_Raster_1.tif 6784 4374
2 Sonar_Raster_FocalMean_5x5_0.tif 2045 5525
3 Sonar_Raster_FocalMean_5x5_1.tif 6752 4374
您可以使用 pd.concat 轻松解决此问题,因为每个数据帧的长度都匹配。
df = pd.concat([df, pd.DataFrame(Sonar_pts_List, columns='Sonar_Points')], axis=1)
您还可以使用以下方法将新列分配给具有匹配索引的数据框:
df['Sonar_Points'] = Sonar_pts_List
如果发生上述错误。 只需克隆一个小列(即具有廉价值的列,不会占用太多资源),以便能够回填新值。
一个例子:
df['Sonar_Points'] = df['Volume_ft3']
df['Sonar_Points'] = Sonar_pts_List
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.