【问题标题】:duplicate and combine two dataframes pandas复制并组合两个数据框熊猫
【发布时间】:2019-12-18 00:48:54
【问题描述】:

背景

我有两个样本df

这里是df1

import pandas as pd
l =  [list(['ABC', 'DEF', 'GHI'])]
df1 = pd.DataFrame({'Letters': l})

df1
      Letters
 0  [ABC, DEF, GHI]

还有df2

df2 = pd.DataFrame({'Text' : ['Hi ', 
                                       'hey', 
                                       'hello ',
                                        'bye',
                                        'see ya'
                            ], 

                          'ID': [1,2,3, 4,5]
                         })
df2     
        ID Text
    0   1   Hi
    1   2   hey
    2   3   hello
    3   4   bye
    4   5   see ya

期望的输出

    ID Text  Letters
0   1   Hi     [ABC, DEF, GHI]
1   2   hey    [ABC, DEF, GHI]
2   3   hello  [ABC, DEF, GHI]
3   4   bye    [ABC, DEF, GHI]
4   5   see ya [ABC, DEF, GHI]

问题

如何复制df1df2 并将其组合以获得我想要的输出?

【问题讨论】:

  • df2['letters'] = df['letters']?

标签: python python-3.x pandas list join


【解决方案1】:

也可以broadcast_to

df2['letters'] = np.broadcast_to(df1['Letters'], len(df2))

    Text    P_ID    letters
0   Hi      1       [ABC, DEF, GHI]
1   hey     2       [ABC, DEF, GHI]
2   hello   3       [ABC, DEF, GHI]
3   bye     4       [ABC, DEF, GHI]
4   see ya  5       [ABC, DEF, GHI]

【讨论】:

  • 啊哈,很好,感谢您介绍这个 :) 任何关于 resize v/s broadcast 差异的好读物?
  • @anky_91 不确定是否读得好,但它们根本不同;p resize 无论如何都会调整为指定的形状。它将数组开头的值的副本引入到其末尾以“填充”它,直到它到达形状。 broadcast 遵循非常严格的broadcasting rules
【解决方案2】:

你可以这样做:

df2=df2.assign(**pd.concat([df1]*len(df2),ignore_index=True))

或者:

df2=df2.assign(Letters=np.resize(df1.to_numpy(),len(df2))) #df1.values for lower versions

     Text  P_ID          Letters
0     Hi      1  [ABC, DEF, GHI]
1     hey     2  [ABC, DEF, GHI]
2  hello      3  [ABC, DEF, GHI]
3     bye     4  [ABC, DEF, GHI]
4  see ya     5  [ABC, DEF, GHI]

【讨论】:

  • 不错的pd.concat :) +1
猜你喜欢
  • 1970-01-01
  • 2017-06-11
  • 2016-01-01
  • 1970-01-01
  • 2021-07-28
  • 2017-11-13
相关资源
最近更新 更多