从pandas dataframe列创建指定长度的组

时间:2018-04-15 12:46:31

标签: python pandas

Pandas noob,不能为我的生活弄清楚如何在不使用python功能的情况下实现单线程(因为我正在尝试学习熊猫并且觉得它可以处理这个)。提示?

我有一个会话话语数据框,我想创建一组话语,从列表中输入组大小。

#utterance column in list form
utterance_list = ['this', 'is', 'not', 'working']

df = pd.DataFrame({'utterances': utterance_list})

#list of desired group sizes
sizes = [1, 0, 3]

{insert missing function here}

desired output = ['this', '', 'is not working']

2 个答案:

答案 0 :(得分:1)

此解决方案仅使用pandasnumpy

由于pandas将数据存储在numpy数组中,因此您无理由避免使用numpy功能。

import pandas as pd, numpy as np

A = np.array(['this', 'is', 'not', 'working'])
sizes = np.array([1, 0, 3])

df = pd.DataFrame({'utterances': utterance_list})

df['utterances'] = np.split(A, sizes.cumsum())

print(df)

#            utterances
# 0              [this]
# 1                  []
# 2  [is, not, working]
# 3                  []

答案 1 :(得分:0)

我不确定你的意思是什么"没有Python功能" - 但这是一种方式。

import numpy as np

lst = ['this', 'is', 'not', 'working']
sizes = [1, 0, 3]

idx1 = np.array([0] + sizes).cumsum()[:-1]
idx2 = idx1 + np.array(sizes)

print(idx1, idx2)
# [0 1 1] [1 1 4]

res = [lst[i:j] for i, j in zip(idx1, idx2)]

print(res)
# [['this'], [], ['is', 'not', 'working']]

如果你真的需要一个单行:

res = [lst[i:i+j] for i, j in zip(np.array([0] + sizes).cumsum()[:-1], np.array(sizes))]