数据框列的值和说明

我有一个如下数据框,并且我想摆脱包含有关其他列值(例如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: {A:{0:花园,1:服装,2:食品}}

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

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

wangkewei5724146 回答:数据框列的值和说明

首先使用以下命令将名称代码列保存在新的数据框中:

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],axis=1).assign(source=cols[i])

然后,您可以仅将代码列保留为:

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

但是,只有按您发布的方式排列列时,第一部分才有效。否则,您将需要对列名称进行检查。

,

您可以删除名称列,并将对存储在字典中。但我不知道您为什么不希望将这些组合保留在DataFrame中。

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)
,

这是仅保留代码列的简单方法:

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,.
        .
        .

如果您想要一个带有唯一值的整洁列表,请导入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)
本文链接:https://www.f2er.com/3161731.html

大家都在问