我有一个从 pdf 中删除的 pandas df 数据。为了达到这一点,我已经做了一些相当大的争论。大约 10 个地点有大约 100 种化学浓度,并且在不同的行中,每个浓度都有一个实验室注释,表示来自每个地点对应的测试的信息。我想将单位(各种单位)添加到列名称中,并将实验注释(例如 a、b、c、d、e,在我的数据中有所不同)移动到其各自位置的行中。请看下图。
以前,实验笔记位于其各自实验室测试正下方的行中 - 在与测试站点坐标的 df 进行外部连接后,它被重新排列,如我发布的示例所示。
我对循环缺乏经验,并且由于我的数据中的列数,当然需要循环解决方案。
谢谢你。
尝试使用
将单位添加到列名称中df.rename(columns={'chem1': 'chem1'+df.chem1.iloc(单位行索引),无限重复}, inplace=True)
不知道从哪里开始解决这两个问题
您可以使用
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 起已弃用。此代码不会是最快的,但它应该可以满足您的要求。