数据框列值和说明

2024-06-26 18:00:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下所示的数据框,我想去掉包含关于其他列值的解释/信息的列,比如A_NAMEB_NAME。另外,我想存储代码解释对供以后使用

例如

   A_CODE      A_NAME    B_CODE      B_NAME     C_CODE     C_NAME  \
0       0      GARDEN       100   GARDENING      10000      TOOLS  
1       2        FOOD       102     LIQUIDS      10002      WATER   
2       1    CLOTHING       101        MALE      10001     SPORTS   
3       2        FOOD       102     LIQUIDS      10002      WATER  
4       0      GARDEN       100   GARDENING      10000      TOOLS   
..     ..         ...       ...         ...        ...        ...
    D_CODE          D_NAME      E_CODE               E_NAME  
0  5000000      HAND TOOLS         303               SHOVEL   
1  6000000   MINERAL WATER         505    5-LT WATER BOTTLE  
2  7000000           PANTS         302               SHORTS  
3  6000000   MINERAL WATER         505    1-LT WATER BOTTLE 
4  5000000      HAND TOOLS         303                  AXE  
..     ...             ...         ...                  ...

我只想在数据帧中存储*_CODE列,在其他变量中存储代码名对。我需要每种类型的代码名对:A,B,C,D,E。这样做最好的是什么

我需要这个: {A:{0:花园,1:衣服,2:食物}

对于B: {B:{100:园艺,101:男性,102:液体}

例如,如果我想知道100对B意味着什么,B(100),它应该给我“园艺”


Tags: 数据代码nameltbottlefoodcodetools
3条回答

你可以删除name列并将成对的数据存储在dict中,但是我不知道为什么你不想把这些组合保存在数据帧中

names = {}
for c in df.columns:
    if 'NAME' in c:
        names[c] = list(zip(df[c[:-4]+'CODE'], df[c].values))
        df.drop(c,axis=1,inplace=True)

首先将名称代码列保存在一个新的数据框中:

cols = df.columns.tolist()
for i in range(0, len(cols), 2):
    try:
        codes_df = codes_df.append(df[[cols[i], cols[i+1]]].rename({cols[i]: 'code', cols[i+1]: 'name'}, axis=1).assign(source=cols[i))
    except NameError:
        codes_df = df[[cols[i], cols[i+1]]].rename({cols[i]: 'code', cols[i+1]: 'name'}, axis=1).assign(source=cols[i])

然后您可以只保留代码列:

df = df[[col for col in cols if 'CODE' in col]]

但是,只有当列的排列方式与您发布的一样时,第一部分才起作用。否则,需要对列名进行检查

这是一种只保留代码列的简单方法:

df2 = df[(lambda column: df.filter(like='_CODE').columns)]

我使用了另一个名为df2的数据帧,以避免丢失原始数据

然后,可以将代码存储在名为codes的变量中,并将值放入其中:

codes = []

for i in range(len(df.columns)-1):
        pairs = df.iloc[:,i:i+2].apply(lambda row: ','.join(row.values.astype(str)), axis=1)
        codes.append(pairs)

请注意,它将保留原始数据帧的结构,如果您打印它,您将看到如下内容:

        [0      0,GARDEN
        1        2,FOOD
        2    1,CLOTHING
        3        2,FOOD
        4      0,GARDEN
        dtype: object, 
        0      0,GARDEN
        1        2,FOOD
        2    1,CLOTHING
        3        2,FOOD
        4      0,GARDEN
        dtype: object, 
        .
        .
        .

如果您想要一个具有唯一值的整洁列表,请导入numpy并执行以下操作:

np.unique(codes)

结果是:

array(['0,GARDEN', '1,CLOTHING', '100,GARDENING', '10000,TOOLS',
        '10001,SPORTS', '10002,WATER', '101,MALE', '102,LIQUIDS', '2,FOOD',
        'CLOTHING,101', 'FOOD,102', 'GARDEN,100', 'GARDENING,10000',
        'LIQUIDS,10002', 'MALE,10001'], dtype=object)

相关问题 更多 >