我有一个dataframe
,每行都有一堆图片。我要做的是将其转换为机器学习的格式,因此每张图片都会预测出属性列表。
对于所有图片,将它们变成一行,其余部分将是其原来所在的行。直观地展示它会更容易:
import pandas as pd
df1 = pd.DataFrame({'Name':['Mark', 'Laura', 'Adam'],
'City':['Lisbon', 'Montreal', 'Lisbon'],
'Picture Col 1': ['Pic 47', 'Pic 36', 'Pic 15'],
'Picture Col 2': ['Pic 54', 'Pic 84', 'Pic 48']})
Name City Picture Col 1 Picture Col 2
0 Mark Lisbon Pic 47 Pic 54
1 Laura Montreal Pic 36 Pic 84
2 Adam Lisbon Pic 15 Pic 48
预期结果:
df2 = pd.DataFrame({'Picture':['Pic 47', 'Pic 36', 'Pic 15', 'Pic 54', 'Pic 84', 'Pic 48'],
'Name': ['Mark', 'Laura', 'Adam', 'Mark', 'Laura', 'Adam'],
'City':['Lisbon', 'Montreal', 'Lisbon', 'Lisbon', 'Montreal', 'Lisbon']})
Picture Name City
0 Pic 47 Mark Lisbon
1 Pic 36 Laura Montreal
2 Pic 15 Adam Lisbon
3 Pic 54 Mark Lisbon
4 Pic 84 Laura Montreal
5 Pic 48 Adam Lisbon
每张图片都应该是多个属性的预测指标。这是melt
,pivot
,unstack
吗?我什至不知道。
答案 0 :(得分:1)
new_df = pd.melt(df,id_vars=['Name','City'],value_name='Picture').drop('variable',axis=1)
print(new_df[['Picture','Name','City']])
Picture Name City
0 Pic 47 Mark Lisbon
1 Pic 36 Laura Montreal
2 Pic 15 Adam Lisbon
3 Pic 54 Mark Lisbon
4 Pic 84 Laura Montreal
5 Pic 48 Adam Lisbon
答案 1 :(得分:1)
我们可以做到:
( df1.melt(['Name','City'],value_name='Picture')
.reindex(columns = ['Picture'] + [*df1.columns[:-2]]) )
#.loc[:,['Picture','Name','City']] )
#.reindex(columns = ['Picture','Name','City']) )
或
( df1.set_index(['Name','City'])
.stack()
.rename('Picture')
.reset_index()
.reindex(columns = ['Picture'] + [*df1.columns[:-2]]) )
输出
Picture Name City
0 Pic 47 Mark Lisbon
1 Pic 36 Laura Montreal
2 Pic 15 Adam Lisbon
3 Pic 54 Mark Lisbon
4 Pic 84 Laura Montreal
5 Pic 48 Adam Lisbon
答案 2 :(得分:0)
好像您已经回答了自己的问题。 melt
可以做您想要的。熔化数据框后,只需删除“变量”列(该列列出了图片来自Picture Col 1还是Picture Col 2)。
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.melt.html