python - 如何将行数堆叠到一行并分配id

标签 python pandas dataframe stack pandas-groupby

我有一个像这样的数据框:

band    mean    raster
1   894.343482  D:/Python/Copied/selection/20170219_095504.tif
2   1159.282304 D:/Python/Copied/selection/20170219_095504.tif
3   1342.291595 D:/Python/Copied/selection/20170219_095504.tif
4   3056.809463 D:/Python/Copied/selection/20170219_095504.tif
1   516.9624071 D:/Python/Copied/selection/20170325_095551.tif
2   720.1932533 D:/Python/Copied/selection/20170325_095551.tif
3   689.6287879 D:/Python/Copied/selection/20170325_095551.tif
4   4561.576329 D:/Python/Copied/selection/20170325_095551.tif
1   566.2016867 D:/Python/Copied/selection/20170527_095700.tif
2   812.9927101 D:/Python/Copied/selection/20170527_095700.tif
3   760.4621212 D:/Python/Copied/selection/20170527_095700.tif
4   5009.537164 D:/Python/Copied/selection/20170527_095700.tif

我想将其格式化为:

band1_mean  band2_mean  band3_mean  band4_mean  raster_name         id
894.343482  1159.282304 1342.291595 3056.809463 20170219_095504.tif 1
516.9624071 720.1932533 689.6287879 4561.576329 20170325_095551.tif 2
566.2016867 812.9927101 760.4621212 5009.537164 20170527_095700.tif 3

所有 4 个波段都属于一个栅格,因此值必须全部位于一行中。我不知道如何在没有每个栅格的 key ID 的情况下堆叠它们。 谢谢!

最佳答案

这是一个pivot的案例:

# extract the raster name:
df['raster_name'] = df.raster.str.extract('(\d+_\d+\.tif)')

# pivot
new_df = df.pivot(index='raster_name', columns='band', values='mean')

# rename the columns:
new_df.columns = [f'band{i}_mean' for i in new_df.columns]

输出:

                     band1_mean   band2_mean   band3_mean   band4_mean
raster_name                                                           
20170219_095504.tif  894.343482  1159.282304  1342.291595  3056.809463
20170325_095551.tif  516.962407   720.193253   689.628788  4561.576329
20170527_095700.tif  566.201687   812.992710   760.462121  5009.537164

如果您希望 raster_name 成为普通列,可以在 new_dfreset_index

关于python - 如何将行数堆叠到一行并分配id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56668675/

相关文章:

python - 如何在 CVXPY 中取变量列表的 2-范数?

python - 合并两个 Pandas 数据帧,在一个时间列上重新采样,插值

python - 读取多个 csv 文件,将文件名列表连接到单个 DataFrame 中

python - 非常简单的 Django 表单,用于统计单词数

Python:删除每组中具有最大值的行

python - 以可以在 Python 中排序的格式存储输出

python - pandas 多索引根据第二列选择/删除行

Python- Pandas 按列值的升序减去列值

python - 如何在 python 中使用 MSAL 获取访问 token 时避免在浏览器中弹出标签

python - 无法从以元组为列的字典中创建具有 MultiIndex 列的 pandas DataFrame