首页 > 解决方案 > 如何从数据框列中提取特定项目并将它们用作剩余项目的标签?

问题描述

我有一个只有一列的数据框,我想提取某些项目并将它们变成一个单独的列,用作其他剩余项目的标签。这有点难以解释,例如我所拥有的是:

pd.DataFrame({'Fruits': ['Apple', 'Gala', 'Fuji', 'Grannysmith', 'Honeycrisp', 'Golden', 'pink', 'Orange', 'blood orange', 'Mandrin', 'Tangerine', 'Clementine', 'Banana', 'baby', 'manzano', 'burro']})

          Fruits
0          Apple
1           Gala
2           Fuji
3    Grannysmith
4     Honeycrisp
5         Golden
6           pink
7         Orange
8   blood orange
9        Mandrin
10     Tangerine
11    Clementine
12        Banana
13          baby
14       manzano
15         burro

但我试图将其转换为:

    Fruits  Types
0   Apple   Gala
1   Apple   Fuji
2   Apple   Grannysmith
3   Apple   Honeycrisp
4   Apple   Golden
5   Apple   pink
6   Orange  blood orange
7   Orange  Mandrin
8   Orange  Tangerine
9   Orange  Clementine
10  Banana  baby
11  Banana  manzano
12  Banana  burro

我如何将第一个数据框转换为第二个?我对此感到难过,尤其是当水果种类繁多以及它们各自的类型时。

标签: pythonpandasdataframe

解决方案


首先需要在列表中定义水果,然后通过wherewithisin为缺失值和前向填充创建具有重复水果的新列,然后在两列中删除相同的值boolean indexing并最后设置新列名称:

L = ['Apple','Orange','Banana']

df['a'] = df['Fruits'].where(df['Fruits'].isin(L)).ffill()
df = df.loc[df['a'] != df['Fruits'], ['a','Fruits']]
df.columns = ['Fruits','Types']
print (df)

    Fruits         Types
1    Apple          Gala
2    Apple          Fuji
3    Apple   Grannysmith
4    Apple    Honeycrisp
5    Apple        Golden
6    Apple          pink
8   Orange  blood orange
9   Orange       Mandrin
10  Orange     Tangerine
11  Orange    Clementine
13  Banana          baby
14  Banana       manzano
15  Banana         burro

推荐阅读