python - 如何将包含其他列中值出现次数的列附加到现有数据框?
问题描述
我有一个数据框,其中包含从 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
column0
和 column1
包含该 column 所包含的短语的下位词和上位词部分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])
行不通的。
我找到了一种解决方法:我Series
为每种出现类型(pair
、、、 )创建了 3 个 Pandas hyponym
,hyperonym
并且我编写了一个小循环来计算每一对的置信度分数,但由于原始数据集很大(超过 700 万条记录),所以这个计算不是一种有效的方法(30 小时后计算尚未完成)。因此,可行且希望有效的解决方案是applymap()
为此目的使用 Pandas,但需要将包含出现的列附加到原始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
的出现次数,列是上位词部分 ( query
) 的出现次数,列7
是对 ( sql
,
query
) 的出现次数。如您所见,这些对是相同的,但它们是从不同的短语中提取的。
我的问题是如何做到这一点?如何将事件作为新列附加到现有的DataFrame
?
解决方案
这是有关如何将两列组合的值计数映射到新列的解决方案:
# Create an example DataFrame
df = pd.DataFrame({0: ["a", "a", "a", "b"], 1: ["c", "d", "d", "d"]})
# Count the paired occurrences in a new column
df["count"] = df.groupby([0,1])[0].transform('size')
在编辑之前,我已经通过使用 value_counts 和合并的解决方案回答了这个问题。这个原始的解决方案比 groupby 更慢更复杂:
# Put the value_counts in a new DataFrame, call them count
vcdf = pd.DataFrame(df[[0, 1]].value_counts(), columns=["count"])
# Merge the df with the vcs
merged = pd.merge(left=df, right=vcdf, left_on=[0, 1], right_index=True)
# Potentially sort index
merged = merged.sort_index()
生成的数据框:
0 1 count
0 a c 1
1 a d 2
2 a d 2
3 b d 1
推荐阅读
- php - Php 需要根据获得的百分比订购 div
- jenkins - Jenkins Build 失败了。映像已创建,但 Pod 未启动
- android - 为什么 Android drawable 不显示为列表项背景?
- c# - Microsoft DI:如果两个不同的类在其构造函数参数中采用相同的类型,我如何从配置中为它们注入不同的值?
- ruby-on-rails - 设计模型无法保存到数据库中
- sql - 关键字“ELSE”不断导致语法错误
- c# - 在没有“Thread.Abort()”的情况下立即停止 C# 线程
- json - 如何使用 VBA 代码获取将 JSON 文件读入 Excel 的代码?
- excel - 带格式的文本连接
- c# - 在字段上显示来自 AJAX 调用的验证错误