1

目标是获取如下所示的数据框:

keywords    group
word1        x
word2        x
word3        x

将组和关键字作为 pandas 数据框中的字符串。

并创建一个如下所示的数据框:

x    |word1|word2|word3

这是我当前的代码:

我试过使用一个函数:

def preprocessing(dataset, group, keywords):
    dataset[keywords] = dataset[keywords].replace(' ', '_', regex = True)
    df = dataset.groupby(group)[keywords].apply(lambda x: ','.join(str(x).split()))
    df = pd.DataFrame(df)
    df[keywords] = df[keywords].replace('_', ' ', regex = True)
    return(df)

(其中的 .replace 是为了更容易通过 .join 保留空格)

我试过这样做:

data['keywords'] = ['|%s' %i for i in data['keywords']]
x = data.groupby('group')['keywords'].apply(lambda x: ''.join(str(x).split()))

我得到的输出有两个重要问题。

  1. 输出最终如下所示,以 group 为索引:
0|word1|word2|wordName:x,dtype:object

其中数字似乎是各个单词的索引号,最终字符串以描述性详细信息“名称:x,dtype:object”结尾

  1. 对于大型数据集,它只会获取字符串中的前 30 个和后 30 个结果,中间有一个省略号,几乎就像预览一样。
27|28|29|30|...|-30|-29|-28|

什么会导致奇怪的格式问题和数据丢失?这似乎是 lambda 函数的一个问题,因为其他所有部分都按预期工作。是否有另一种不会导致数据丢失的方法?

4

1 回答 1

2

利用:

df.groupby('group')['keywords'].apply(lambda x: '|'+'|'.join(x))

group
x    |word1|word2|word3
于 2019-04-26T14:33:55.643 回答