Python 如何在dataframe中基于列值将单行拆分为多行?

Python 如何在dataframe中基于列值将单行拆分为多行?,python,pandas,Python,Pandas,我有一个数据框架,如下所示,我需要根据值列中的条件将每一行分解为几行,以便将来进行透视分析。条件:如果列为空,则跳过 原始数据帧: ID name apple pear banana 01 xyz 10 3 02 abc 9 10 5 03 def 8 9 04 fds 5 ID Attribute1 Name

我有一个数据框架,如下所示,我需要根据值列中的条件将每一行分解为几行,以便将来进行透视分析。条件:如果列为空,则跳过

原始数据帧:

  ID     name     apple pear banana
  01     xyz       10          3
  02     abc       9     10    5 
  03     def       8           9
  04     fds       5   
  ID  Attribute1  Name  value
  01     xyz      apple   10
  01     xyz      banana   3
  02     abc      apple    9
  02     abc      pear    10
  02     abc      banana   5
  03     def      apple    8
  03     def      banana   9
  04     fds      apple    5
所需数据帧:

  ID     name     apple pear banana
  01     xyz       10          3
  02     abc       9     10    5 
  03     def       8           9
  04     fds       5   
  ID  Attribute1  Name  value
  01     xyz      apple   10
  01     xyz      banana   3
  02     abc      apple    9
  02     abc      pear    10
  02     abc      banana   5
  03     def      apple    8
  03     def      banana   9
  04     fds      apple    5
我不熟悉熊猫数据分析。使用了很多VBA作为一个老式的Guy我正在尝试使用iteritems和.loc,但没有成功。请帮忙

import pandas as pd 
df = pd.DataFrame(raw_data)
for row in df.iterrows():

解决方案非常简单:用NaN替换空字符串,将前两列转换为多索引,将其余列转换为另一个索引级别。此时将丢弃丢失的值

result = df.replace('', np.nan)\
           .set_index(['ID','name']).stack().reset_index()
#   ID name level_2   0
#0  01  xyz   apple  10
#1  01  xyz  banana   3
#2  02  abc   apple   9
#3  02  abc    pear  10
#4  02  abc  banana   5
#5  03  def   apple   8
#6  03  def  banana   9
#7  04  fds   apple   5
(可选)重命名列:

result.rename({'level_2': 'Attribute1', 0: 'value'}, axis=1)
你可以用熔化法


谢谢这起作用了。非常感谢!谢谢DYZ教授的快速回复。不知何故,有回溯说“np”没有定义。最喜欢我的错。这对我理解.melt和.stack方法有很大帮助。谢谢您应该将numpy作为np导入,这是一个标准约定