我有一个数据框,其中包含从StackOverflow帖子中提取的上下位词和上下位词对。您可以在以下内容中看到其中的摘录:
0 1 2 3 4
linq query asmx web service THH 10 a linq query as an asmx web service
application bolt THH 1 my application is a bolt on data visualization...
area r time THH 1 the area of the square is r times
sql query syntax HTH 3 sql like query syntax
...
7379596 rows × 5 columns
列0
和列1
包含列4
所包含短语的上下位词和上下位词部分。我想实现一个基于统计特征的过滤器,因此我必须一起计算成对(0, 1)
列的所有出现次数,分别计算下义和上义部分的所有出现次数。Pandas有一个名为value_counts()
的方法,因此可以通过以下方法计算出现次数:
df.value_counts([0])
df.value_counts([1])
df.value_counts([0, 1])
这很好,但是该方法产生了一个PandasSeries
,它的记录比原始的DataFrame
少得多,因此,添加像df[5] = df.value_counts([0, 1])
这样的新列不起作用
我找到了一个解决方法:我为每个事件类型(pair
,hyponym
,hyperonym
)创建了3个PandasSeries
),并且我编写了一个小循环来计算每对事件的置信度得分,但由于原始数据集非常庞大(超过700万条记录),因此这种计算不是一种有效的方法(30小时后计算尚未完成)。因此,可行且希望有效的解决方案是为此目的使用Pandasapplymap()
,但需要将包含引用的列附加到原始DataFrame
。因此,我想要一个类似于此的DataFrame
:
0 1 2 3 4 5 6 7
sql query anything anything a phrase 1000 800 500
sql query anything anything anotherphrase 1000 800 500
...
列5
是下位词部分(sql
)的出现,列6
是hyperonym部分(query
)的出现次数,列7
是成对(sql
)的出现次数,
query
)。正如您所看到的,这对词是相同的,但它们是从不同的短语中提取出来的
我的问题是如何做到这一点?如何将引用作为新列附加到现有的DataFrame
以下是如何将两列组合的值计数映射到新列的解决方案:
在编辑之前,我用一个使用值计数和合并的解决方案回答了这个问题。此原始解决方案比groupby更慢、更复杂:
生成的数据帧:
相关问题 更多 >
编程相关推荐