我将数据保存在Excel中。我使用Python2.7查询这些数据并将其转换为Pandas DataFrame。我的数据框中有一个名为category的列。它中包含一个值的字典(或列表?)。 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
任何人都可以帮助我..
答案 0 :(得分:1)
我认为你需要:
ast
将string
转换为dictionaries
stack
index
转换为reset_index
drop_duplicates
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
使用groupby
和join
:
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