python - 在 Pandas Dataframe 中添加新列比较索引
问题描述
我正在努力解决 Pandas 中的一个问题。基本上我想将一个新列(来自文档数据框)添加到一个更大的数据框(语料库数据框),并且这两个数据框具有不同的形状和索引。所以我知道我必须映射两者的索引然后添加它。我一直在尝试不同的事情(合并,定位......),但我没有找到解决方案。这里的例子:
一方面,我有一个通用数据框,其中包含语料库中的所有标记(语料库数据框):
|-------|------------------|
| token | mean_freq_corpus |
|-------|------------------|
| de | 35 |
|-------|------------------|
| el | 29 |
|-------|------------------|
| la | 15 |
|-------|------------------|
| en | 10 |
|-------|------------------|
| se | 5 |
|-------|------------------|
另一方面,我有一堆数据框,其中还包含有关此令牌在每个特定文档(文档数据框)中的频率的信息。像:
|-------|------------------|
| token | Doc_1 |
|-------|------------------|
| de | 20 |
|-------|------------------|
| se | 10 |
|-------|------------------|
|-------|------------------|
| token | Doc_2 |
|-------|------------------|
| el | 15 |
|-------|------------------|
| la | 12 |
|-------|------------------|
|-------|------------------|
| token | Doc_3 |
|-------|------------------|
| de | 30 |
|-------|------------------|
| el | 20 |
|-------|------------------|
| la | 12 |
|-------|------------------|
| en | 10 |
|-------|------------------|
如您所见,形状不同,我从中获得信息的标记也不同,所以我不能不考虑索引就将这些信息添加到 general_frequency 表中。我最后想要的是:
|-------|------------------|-----|-----|-----|
| token | mean_freq_corpus |Doc_1|Doc_2|Doc_3|
|-------|------------------|-----|-----|-----|
| de | 35 | 20 | 0 | 30 |
|-------|------------------|-----|-----|-----|
| el | 29 | 0 | 10 | 20 |
|-------|------------------|-----|-----|-----|
| la | 15 | 0 | 15 | 12 |
|-------|------------------|-----|-----|-----|
| en | 10 | 0 | 0 | 10 |
|-------|------------------|-----|-----|-----|
| se | 5 | 10 | 0 | 0 |
|-------|------------------|-----|-----|-----|
我可以遍历不同的文档数据帧并使用 df.at[index,column] 将值附加到语料库数据帧中,但我想知道是否还有其他可能使用 map、lambda 或类似的东西。
请考虑到示例已简化,每个表有几千个,而我有几千个这样的文档表。谢谢!
解决方案
用于concat
连接所有小DataFrame
s,然后join
首先DataFrame
使用左连接:
dfs = [df1, df2, df3]
df_all = pd.concat([x.set_index('token') for x in dfs], axis=1).fillna(0).astype(int)
df = df.join(df_all, on='token')
print (df)
token mean_freq_corpus Doc_1 Doc_2 Doc_3
0 de 35 20 0 30
1 el 29 0 15 20
2 la 15 0 12 12
3 en 10 0 0 10
4 se 5 10 0 0
推荐阅读
- reactjs - RefferenceError:找不到变量 React
- selenium - 有没有办法从 Selenium Cucumber testng 框架中的 @DataProvider 注释中获取数据?
- python - 从 AWS lambda 将文件上传到 S3 时出现 MD-5 校验和错误
- airflow - 云作曲家解析 json
- sql - 在动态 sql 查询中将 varchar 转换为数字时出错
- java - 如何修复 maven 异常:[错误] 无法执行目标 org.apache.maven.plugins:maven-clean-plugin:2.6.1:clean
- php - 函数中的php变量范围?
- c++ - c++ 如何定义一个 std::result_of
可以处理 R 是无效的 - ios - 如何解决本地化问题?
- sql - 如何从表格中获得每个类别顶部和底部的总和比率 10%?