python - 在 Pandas 列中拆分字典/列表并转换为新数据框

标签 python pandas dictionary dataframe data-analysis

我有数据保存在 Excel 中。我正在使用 Python2.7 查询这些数据并将其转换为 Pandas DataFrame。我的数据框中有一列名为“类别”的列。其中有一个值的字典(或列表?)。数据框如下所示:

[1] df
ID                                          CATEGORY
1                                       {60: 'SHOES'}
2                                    {46: 'HARDWARE'}
3                                       {60: 'SHOES'}
4                          {219: 'GOVERNMENT OFFICE'}
5                         {87: 'ARCADES',60: 'SHOES'}

我需要将此列拆分为单独的列,以便 DataFrame 看起来像这样:

[2] df2
CATEGORY_ID                   CATEGORY_NAME
60                                    SHOES
46                                 HARDWARE
219                       GOVERNMENT OFFICE
87                                  ARCADES

我需要在数据框中添加一个新列

[3] df
ID           CATEGORY_id         
1                    60
2                    46
3                    60
4                   219 
5                 87,60 

任何人请帮我解决这个问题..

最佳答案

我认为你需要:

<小时/>
import ast
df = (pd.DataFrame(df['CATEGORY'].apply(ast.literal_eval).values.tolist())
       .stack()
       .reset_index(level=0, drop=True)
       .reset_index()
       .drop_duplicates()
       .rename(columns={'index':'CATEGORY_ID', 0:'CATEGORY_NAME'}))
print (df)
   CATEGORY_ID      CATEGORY_NAME
0           60              SHOES
1           46           HARDWARE
3          219  GOVERNMENT OFFICE
5           87            ARCADES

编辑:解决方案有点简单,要加入重复的CATEGORY_ID,请使用groupbyjoin:

import ast
df = (pd.DataFrame(df['CATEGORY'].apply(ast.literal_eval).values.tolist(), index=df['ID'])
       .stack()
       .reset_index()
       .rename(columns={'level_1':'CATEGORY_ID', 0:'CATEGORY_NAME'})
       )
print (df)
   ID  CATEGORY_ID      CATEGORY_NAME
0   1           60              SHOES
1   2           46           HARDWARE
2   3           60              SHOES
3   4          219  GOVERNMENT OFFICE
4   5           60              SHOES
5   5           87            ARCADES


df1 = df.groupby('ID')['CATEGORY_ID'].apply(lambda x: ', '.join(x.astype(str))).reset_index()
print (df1)
   ID CATEGORY_ID
0   1          60
1   2          46
2   3          60
3   4         219
4   5      60, 87

关于python - 在 Pandas 列中拆分字典/列表并转换为新数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49335168/

相关文章:

python - Pandas plotting--忽略时间范围

python - 使用 NaN header 重命名 Pandas 数据框

dictionary - Clojure - 沿着路径行走

python - 如何整合 MS Teams 的出席名单?

python - Pyspark:读取多个csv文件并用源注释它们

python - Tensorflow - 对多个图像进行批量预测

python - Pandas 可以自动检测不同的日期时间格式

python - 为什么直接使用 dir() in all(...) 总是在 python 中返回 False?

python - 在 python 中使用 csv.DictReader 进行数据类型转换的最快方法

python - 编写一个 for 循环来打印 1 个嵌套字典的键