繁体   English   中英

Pandas - 将列表值匹配到数据集名称中的索引,并将列表值匹配到新列

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM