在数据框中,19 列每个单元格中有 3 个值,用 \n 分隔。这些值必须分为三个附加列:“绝对数”、“粗略”、“具体重量,%”。这样每个新列都有一个带有旧列名称的附言,例如“绝对数_0-4”、“粗_0-4”、“具体重量,%_0-4”。旧的列需要移除。
我尝试这样做:
new_data = {}
for key, value in data.items():
column_values = value.str.split('\n', expand=True)
if len(column_values) >= 3:
new_data[key] = {
'Абс.число': column_values[0],
'Грубый': column_values[1],
'Уд.вес,%': column_values[2]
}
该代码不起作用。还有一个问题是,除了 19 列之外,还有 3 列每个单元格只有一个值。
一般来说,您可以将每个单独的列拆分为三个新列并重命名,但结果是代码庞大且缺乏吸引力。我不明白如何才能把代码写得更简洁、漂亮,同时又节省时间(

始终在您的问题中提供示例源数据!
假设您有一个 df 表:
不幸的是,我怀疑是否有可能通过矢量化(应用)创建有效的代码来解决您的问题 - 索引会出现混乱,并且在大型表上速度会很低。所以我建议做这样的事情:
你得到 df:
当然,列的顺序会改变。
我们转置框架,将 lambda 应用于行(在 lambda 中,我们将所有内容转换为文本并将其剪切为列表)。然后我们将字符串乘以“爆炸”并转置回来。然后我们形成列的名称 - 每三个连续的相同名称都补充有前缀。
该解决方案的优点:
缺陷:
\n。