复制与Pandas中多个列模式匹配的列值

2024-10-03 21:28:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我碰巧有以下数据帧:

import pandas as pd
import numpy as np

df = pd.DataFrame({ 'Prod1':   ['10','','10','','',''],
                    'Prod2':   ['','5','5','','','5'],
                    'Prod3':   ['','','','8','8','8'],
                    'String1': ['','','','','',''],
                    'String2': ['','','','','',''],
                    'String3': ['','','','','',''],
                    'X1':      ['x1','x2','x3','x4','x5','x6'],
                    'X2':      ['','','y1','','','y2']
                    })
print(df)

  Prod1 Prod2 Prod3 String1 String2 String3  X1  X2
0    10                                      x1    
1           5                                x2    
2    10     5                                x3  y1
3                 8                          x4    
4                 8                          x5    
5           5     8                          x6  y2

这是一个带有相关字符串的产品的示意表;实际的字符串在列(X1X2),但它们最终应该移动到(String1String2String3),这取决于对应的产品是否有值。在

例如: 行0Prod1上有一个值,因此x1应该移动到String1。 行1Prod2上有一个值,因此x2应该移动到String2。在

{Prods}通常是多个{Prods},其中的cd15>中应该有多个值。最终结果如下:

^{pr2}$

我在考虑嵌套的列/行循环,但我对pandas还不够熟悉,无法找到解决方案。 非常感谢您的任何建议!在


Tags: importpandasdfaspdx1x2string1
1条回答
网友
1楼 · 发布于 2024-10-03 21:28:11

我将步骤分解:

df[['String1', 'String2', 'String3']]=(df[['Prod1', 'Prod2', 'Prod3']]!='')
df1=df[['String1', 'String2', 'String3']].replace({False:np.nan}).stack().to_frame()
df1[0]=df[['X1','X2']].replace({'':np.nan}).stack().values
df[['String1', 'String2', 'String3']]=df1[0].unstack()
df.replace({None:''})


Out[1036]: 
  Prod1 Prod2 Prod3 String1 String2 String3  X1  X2
0    10                  x1                  x1    
1           5                    x2          x2    
2    10     5            x3      y1          x3  y1
3                 8                      x4  x4    
4                 8                      x5  x5    
5           5     8              x6      y2  x6  y2

相关问题 更多 >