首页 > 解决方案 > 在 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 或类似的东西。

请考虑到示例已简化,每个表有几千个,而我有几千个这样的文档表。谢谢!

标签: pythonpandasdataframe

解决方案


用于concat连接所有小DataFrames,然后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

推荐阅读