Pandas:对于多行中的每个行值,将其转换为新行

问题描述 投票:1回答:3

我有一个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

每个图片都应该是多个属性的预测指标。这是meltpivotunstack吗?我什至不知道。

python pandas dataframe
3个回答
0
投票

看起来您已经回答了自己的问题。 melt可以做您想要的。熔化数据框后,只需删除“变量”列(此列列出了图片是来自Picture Col 1还是Picture Col 2)。

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.melt.html


0
投票
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

0
投票

我们可以做:

( 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
© www.soinside.com 2019 - 2024. All rights reserved.