[英]pandas: Create new column by comparing DataFrame rows of one column of DataFrame
[英]Add new column in Pandas Dataframe comparing indexes
我在熊猫问题上挣扎。 基本上,我想将新列(从文档数据框)添加到更大的数据框(语料库数据框),并且两个数据框具有不同的形状和索引。 因此,我了解到必须映射两个索引,然后将其添加。 我一直在尝试不同的操作(合并,查找...),但找不到解决方案。 这里的例子:
一方面,我有一个通用数据框,其中包含语料库中的所有标记(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或类似方法的可能性。
请考虑示例的简化,每个表有数千个,而我有数千个这些文档表。 谢谢!
使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.