然后,Groupby根据唯一值创建列

时间:2019-11-29 16:33:32

标签: python pandas

我似乎找不到答案:

所以我有一个很大的数据集,其中有一个列(TCFM,BLE,IA&C和II&T)。

我想知道如何为每个类别(“ TCFM”,“ IA&C”,nan,“ II&T”,“ BLE”)创建新列。保留所有原始数据吗?

Product Views    Revenue    SEO Entries    Category 
32               -123.29        5          TCFM
6                  91.55        1          IA&C

这将继续进行4000行

grouped = impact.groupby('Category')

我知道我需要对其进行分组,但是不确定如何将其实现到数据框中。

因此基本上在原始数据帧上添加了四列

1 个答案:

答案 0 :(得分:0)

您期望这样的事情吗?

转换

   Product Views  Revenue  SEO Entries Category
0             53       19           73      BLE
1             41       56           52     TCFM
2              5       92           36     None
3             18       57           38     II&T
4             92       15           92     II&T

   Product Views  Revenue  SEO Entries   TCFM   IA&C    NaN   II&T    BLE
0             53       19           73  False  False  False  False   True
1             41       56           52   True  False  False  False  False
2              5       92           36  False  False  False  False  False
3             18       57           38  False  False  False   True  False
4             92       15           92  False  False  False   True  False

用于生成示例数据框的代码

import pandas as pd
import numpy as np
import random

categories = ['TCFM', 'IA&C', None, 'II&T', 'BLE']
cols = ['Product Views', 'Revenue', 'SEO Entries', 'Category']

data = {}
for i in range(3):
    data[cols[i]] = np.random.randint(0, 100, size=10)

data['Category'] = random.choices(categories, k=10)

df = pd.DataFrame(data, columns=cols)
print(df.head())

生成新列的代码

for item in categories:
    df[item] = np.where(df.Category == item, True, False)

df1 = df.drop(['Category'], axis=1)
print(df1.head())

此行为每个category项目创建新列。 df[item] = np.where(df.Category == item, True, False)

如果True列的值等于item,则将值设置为Category,否则将其设置为False https://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html