在Pandas Dataframe中添加新列以比较索引

时间:2018-07-23 07:18:09

标签: python pandas dataframe

我在熊猫问题上苦苦挣扎。基本上,我想将新列(从文档数据框)添加到更大的数据框(语料库数据框),并且两个数据框具有不同的形状和索引。因此,我了解到必须映射两个索引,然后将其添加。我一直在尝试不同的操作(合并,查找...),但找不到解决方案。这里是示例:

一方面,我有一个通用的数据框,其中包含了语料库中的所有标记(corpus-dataframe):

|-------|------------------|
| 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或类似方法的可能性。

请考虑示例的简化,每个表有数千个,而我有数千个这些文档表。谢谢!

1 个答案:

答案 0 :(得分:2)

使用concat连接所有小的DataFrame,然后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