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']
答案 0 :(得分:1)
此解决方案仅使用pandas
和numpy
。
由于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))]