我在熊猫问题上苦苦挣扎。基本上,我想将新列(从文档数据框)添加到更大的数据框(语料库数据框),并且两个数据框具有不同的形状和索引。因此,我了解到必须映射两个索引,然后将其添加。我一直在尝试不同的操作(合并,查找...),但找不到解决方案。这里是示例:
一方面,我有一个通用的数据框,其中包含了语料库中的所有标记(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或类似方法的可能性。
请考虑示例的简化,每个表有数千个,而我有数千个这些文档表。谢谢!
答案 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