【问题标题】:Add new column in Pandas Dataframe comparing indexes在 Pandas Dataframe 中添加新列比较索引
【发布时间】:2018-07-23 07:18:09
【问题描述】:

我正在努力解决 Pandas 中的一个问题。基本上我想将一个新列(来自文档数据框)添加到一个更大的数据框(语料库数据框),并且这两个数据框具有不同的形状和索引。所以我知道我必须映射两者​​的索引然后添加它。我一直在尝试不同的东西(合并,定位......),但我没有找到解决方案。这里是例子:

一方面,我有一个包含语料库中所有标记的通用数据框(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 或类似的东西。

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

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    使用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
    

    【讨论】:

    • 谢谢! concat axis = "col" 是我正在寻找的东西。我必须再读一遍 VanderPlas 的那一章。完美的!再次感谢!
    猜你喜欢
    • 2019-04-06
    • 2023-01-11
    • 1970-01-01
    • 2018-06-23
    • 2016-05-03
    • 1970-01-01
    • 2018-01-18
    • 2012-10-09
    • 2018-11-18
    相关资源
    最近更新 更多