python - 有什么方法可以从两个数据帧创建一个新的数据帧,其中一个 df 的每一行都必须重复?

标签 python pandas dataframe duplicates concatenation

我有两个数据框,如下所示。我想创建一个新的数据框,其中必须根据 df2 行的长度复制 df1 列,然后必须将行的每个值附加为新行,如下所示异常(exception)输出的呈现方式。我尝试连接两个数据帧,然后用于实现异常输出,但返回空数据帧。有没有最好的方法来获得异常(exception)的输出?

数据框:-

将 pandas 导入为 pd

data = [10,20,30,40,50,60]
df1 = pd.DataFrame(data, columns=['Numbers'])
df1
  Numbers
0   10
1   20
2   30
3   40
4   50
5   60
data = {'name':['pro','lop1','lo','p','ll','qi'],'name2':['pro2','lop2','lol','po','llop','qiij'],
        'names':['pro1','lop3','lol1','ppp','lop','qis']}
df2 = pd.DataFrame(data)
df2
    name    name2   names
0   pro     pro2    pro1
1   lop1    lop2    lop3
2   lo      lol     lol1
3   p       po      ppp
4   ll      llop    lop
5   qi      qiij    qis

代码:-

new_df=pd.concat([df1,df2],axis=1)
final = (pd.wide_to_long(new_df,stubnames=['Names'], i=['Numbers'], 
                j='drop').reset_index().drop('drop', 1))
print(final)

Numbers names   name    name2   Names

(给出空数据框)

异常输出:-

Numbers  Name
    10      pro
    10      pro2
    10      pro1
    20      lop1
    20      lop2
    20      lop3
    30      lo
    30      lol
    30      lol1
    40      p
    40      po
    40      ppp
    50      ll
    50      llop
    50      lop
    60      qi
    60      qiij
    60      qis

最佳答案

使用concatDataFrame.set_indexDataFrame.stack ,最后删除 Multiindex 的第二层并创建 2 列 DataFrame:

new_df = (pd.concat([df1,df2],axis=1)
            .set_index('Numbers')
            .stack()
            .droplevel(1)
            .reset_index(name='Name'))

或者使用DataFrame.melt ,那么需要按 DataFrame.sort_values 排序:

new_df = (pd.concat([df1,df2],axis=1)
            .melt('Numbers', value_name='Name')
            .drop('variable', axis=1)
            .sort_values('Numbers', ignore_index=True, kind='mergesort'))
print (new_df)
    Numbers  Name
0        10   pro
1        10  pro2
2        10  pro1
3        20  lop1
4        20  lop2
5        20  lop3
6        30    lo
7        30   lol
8        30  lol1
9        40     p
10       40    po
11       40   ppp
12       50    ll
13       50  llop
14       50   lop
15       60    qi
16       60  qiij
17       60   qis

关于python - 有什么方法可以从两个数据帧创建一个新的数据帧,其中一个 df 的每一行都必须重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73359962/

相关文章:

r - 我想获取数据框中所有行的行号,其中列中的元素包含向量中的元素

python - 如何使用 pd.read_csv 过滤 Pandas 中的列

python - 在 Centos 6.4 上安装 mysql-python

python - Django QuerySet 中的 icontains 没有给出不区分大小写的结果?

python - 是否有标准的 Python 类可以对浮点范围进行 bool 运算?

python - 在其余代码单独运行的同时持续检查网络可用性

python - 如何在 python-pandas 中对 ACROSS 组进行平均?

python - 按绝对值排序而不更改数据

python - 任何无需重命名列即可进行过滤的方法

python - 根据组的频率计数添加新列