首页 > 解决方案 > 如何在python数据框中将一行转换为带有条件的维度

问题描述

如何在条件下将行转换为维度?

第 0 行和第 3 行是类别总数

当前格式

import pandas as pd

data = [['FRUIT', 'FRU', 100],['A.GRAPE','A.GRA', 50],['A.APPLE','A.APP', 50],
        ['VEGETABLE', 'VEG', 75],['A.TOMATO','A.TOM', 25],['A.CABBAGE','A.CAB', 25],['A.CARROT','A.CAR', 25]]

df = pd.DataFrame(data, columns = ['name', 'abbrevation', 'value'])
df.head(10)

在此处输入图像描述

所需格式

data2 = [['FRUIT','FRU','A.GRAPE','A.GRA', 50],['FRUIT','FRU','A.APPLE','A.APP', 50],
        ['VEGETABLE','VEG','A.TOMATO','A.TOM', 25],['VEGETABLE','VEG','A.CABBAGE','A.CAB', 25],['VEGETABLE','VEG','A.CARROT','A.CAR', 25]]

df2 = pd.DataFrame(data2, columns = ['category','category abbrevation','name', 'abbrevation', 'value'])
df2.head(10)

在此处输入图像描述

*类别下的行号可能不同

我检查了论坛,似乎什么都没有

尝试参考此@https://stackoverflow.com/questions/62626290/how-to-merge-every-3-rows-of-a-dataframe-into-1-row-with-3-columns

但那是不同的,我可以知道如何实现所需的格式吗?

谢谢

标签: pythonpandasdataframe

解决方案


通过仅应用类别的 alpha 来查找类别。使用前向填充 - ffil 将类别中的 None 值替换为 Non-None 值

    data = [['FRUIT', 'FRU', 100],['A.GRAPE','A.GRA', 50],['A.APPLE','A.APP', 50],
    ['VEGETABLE', 'VEG', 75],['A.TOMATO','A.TOM', 25],['A.CABBAGE','A.CAB', 25],['A.CARROT','A.CAR', 25]]
  df = pd.DataFrame(data, columns = ['name', 'abbrevation', 'value'])

  df['Category']=df['name'].apply(lambda x: x if x.isalpha() else None)
  df.ffill(inplace=True)
  print(df)

输出

          name abbrevation  value   Category
  0      FRUIT         FRU    100      FRUIT
  1    A.GRAPE       A.GRA     50      FRUIT
  2    A.APPLE       A.APP     50      FRUIT
  3  VEGETABLE         VEG     75  VEGETABLE
  4   A.TOMATO       A.TOM     25  VEGETABLE
  5  A.CABBAGE       A.CAB     25  VEGETABLE
  6   A.CARROT       A.CAR     25  VEGETABLE

推荐阅读