将 pandas df 中的值移动到 df 中的新列,根据列中的 str 重命名列

问题描述 投票:0回答:1

我有一个从 pdf 中删除的 pandas df 数据。为了达到这一点,我已经做了一些相当大的争论。大约 10 个地点有大约 100 种化学浓度,并且在不同的行中,每个浓度都有一个实验室注释,表示来自每个地点对应的测试的信息。我想将单位(各种单位)添加到列名称中,并将实验注释(例如 a、b、c、d、e,在我的数据中有所不同)移动到其各自位置的行中。请看下图。

当前 df 与所需 df 布局

以前,实验笔记位于其各自实验室测试正下方的行中 - 在与测试站点坐标的 df 进行外部连接后,它被重新排列,如我发布的示例所示。

我对循环缺乏经验,并且由于我的数据中的列数,当然需要循环解决方案。

谢谢你。

尝试使用

将单位添加到列名称中

df.rename(columns={'chem1': 'chem1'+df.chem1.iloc(单位行索引),无限重复}, inplace=True)

不知道从哪里开始解决这两个问题

pandas dataframe rename
1个回答
0
投票

您可以使用

iloc
来分隔行,然后

StartColumns = df.columns
newColumns = df.iloc[5:10, 3:]
NewColumnNames = [StartColumns[i] + "_LQ" for i in range(3, len(StartColumns))]
newColumns.columns = NewColumnNames
# Don't change the first 3 column names
ColNames = [StartColumns[i] if i < 3 else "_".join(StartColumns[i], df.iat[10, i]) for i in range(len(StartColumns))]
df.columns = ColNames
FinalDf = pd.concat(df, newColumns, ignore_index = True, axis = 1)

然后要重新排序列,您需要使用类似的东西

AllCols = ColNames[:3]
for i in range(2 * len(NewColumnNames)):
    # Integer division truncates, so we can take the first relevant index 
    # from our renamed columns, then the first from our new columns
    if i % 2 == 0:
        AllCols.append(ColNames[3 + int(i/2)])
    else:
        AllCols.append(NewColumnNames[int(i/2)])
FinalDf = FinalDf[AllCols]

请注意,iloc 自 2.2.0 起已弃用。此代码不会是最快的,但它应该可以满足您的要求。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.