我有一个如下所示的数据框,我必须准备“目标列”
如果同一列下的两个单词之间有逗号,则必须按第2行所示标记两次。如果没有逗号但有空格,则必须将其视为同一个单词,即必须标记一次。另外,请注意顺序也很重要(第3行和第6行)。忽略任何内容(即没有单词,因此没有标签)
我已经使用了迭代(即使用iloc,for循环),但是它需要大量的时间,因为数据点超过200k,标签的数量也超过20个。我希望有一个有效的代码。请让我知道。此外,如果您想对问题/示例进行额外的澄清,请告诉我。
您可以使用数据帧。过滤带有标记文本的列,按数据帧重新整形。堆栈用于删除无,NaN,系列。str.split
与系列。使用,分解重复值。然后用
#if none is not None (NoneType) convert to NaN
df = df.replace('none',np.nan)
df1 = (df.set_index('keyphrase', append=True)
.filter(like='tag')
.stack()
.rename_axis(('idx','keyphrase','tags'))
.str.split(', ')
.explode()
.reset_index(name='word')
.rename_axis('i')
)
#for correct ordering by splitted keyphrase by reindex
df1 = df1.assign(word = df1['word'].str.split()).explode('word')
df1['keyphrase'] = df1.groupby('idx')['keyphrase'].transform(lambda x: x.iat[0].split())
idx = df1.set_index(['idx','word'], append=True).index.droplevel(0)
df1 = df1.set_index(['idx','keyphrase'], append=True).reset_index(level=0).reindex(idx)
df1 = df1.groupby(['idx','i','tags'], sort=False)['word'].agg(' '.join).reset_index()
df1['word'] = '<' + df1['tags'] + '>' + df1['word']+ '<' + df1['tags'] + '>'
print (df1)
idx i tags word
0 0 0 tag2 <tag2>word1<tag2>
1 0 1 tag3 <tag3>word2<tag3>
2 1 2 tag3 <tag3>word3<tag3>
3 1 3 tag3 <tag3>word4<tag3>
4 2 5 tag3 <tag3>word5<tag3>
5 2 4 tag1 <tag1>word6<tag1>
6 3 6 tag2 <tag2>word7 word8<tag2>
7 4 7 tag1 <tag1>word9<tag1>
8 4 8 tag3 <tag3>word10 word11<tag3>
9 5 10 tag2 <tag2>word12<tag2>
10 5 9 tag1 <tag1>word13<tag1>
11 5 11 tag3 <tag3>word14<tag3>
df['target'] = df1.groupby('idx')['word'].agg(''.join)
print (df)
row keyphrase tag1 tag2 tag3 \
0 1 word1 word2 NaN word1 word2
1 2 word3 word4 NaN NaN word3, word4
2 3 word5 word6 word6 NaN word5
3 4 word7 word8 NaN word7 word8 None
4 5 word9 word10 word11 word9 NaN word10 word11
5 6 word12 word13 word14 word13 word12 word14
target
0 <tag2>word1<tag2><tag3>word2<tag3>
1 <tag3>word3<tag3><tag3>word4<tag3>
2 <tag3>word5<tag3><tag1>word6<tag1>
3 <tag2>word7 word8<tag2>
4 <tag1>word9<tag1><tag3>word10 word11<tag3>
5 <tag2>word12<tag2><tag1>word13<tag1><tag3>word...
我有这种熊猫。数据框。“a”、“b”是获得“x”和“y”时的条件。 我需要绘制关于相同条件的(x,y)结肠的折线图。预期结果图为: 当然,这个图像是由以下代码手动给出的: 我的问题是,当获得一个包含条件列x和y的数据帧时,如何动态地绘制如上所述的图。 列名是固定的。但是,条件列的值是动态更改的。因此,我不能使用10、20、100、200的值。 如果我有下面的“用a和b过滤”方法,我认为问题解决了:
我有以下数据帧: 我需要删除等于的行。最有效的方法是什么?
我有两个数据帧,其中一列名为。数据帧是从两名参与者同时录制的两个视频中提取的数据。由于跟踪失败,数据缺少一些帧(每个视频不同)。我想根据帧整数值取一个交点。 这里发布了一个类似的问题:熊猫——基于列条目的两个数据帧的交集,但接受的答案是连接,而不是交集。 已删除的行不在和 (我可以重置索引后,我完成处理) 我想首先得到两个数据帧的帧列的交集: 错误: 在获得两个数据帧中的帧索引后,我考虑执行以下操
我想基于多个条件的评估创建一系列新的逻辑值。 举个例子 然而,我想返回一个逻辑序列,即。 如果可能的话,我想用熊猫的方法。
我有两个熊猫数据框 步骤2:对于flag=1的行,AA_new将计算为var1(来自df2)*组“A”和val“AA”的df1的'cal1'值*组“A”和val“AA”的df1的'cal2'值,类似地,AB_new将计算为var1(来自df2)*组“A”和val“AB”的df1的'cal1'值*组“A”和val“AB”的df1的'cal2'值 我的预期输出如下所示: 以下基于其他stackflow
我有这样一个数据帧: 我如何摆脱第四行,因为它有sq_resid的最大值?注意:最大值将从一个数据集更改到另一个数据集,所以仅仅删除第4行是不够的。 我已经尝试了一些方法,比如我可以删除像下面这样留下数据帧的最大值,但是无法删除整行。