关于python:如何根据列值将数据行中的单行分成多行?

How to break single row into multiple rows in dataframe base on column values?

本问题已经有最佳答案,请猛点这里访问。

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

原始数据文件:

1
2
3
4
5
  ID     name     apple pear banana
  01     xyz       10          3
  02     abc       9     10    5
  03     def       8           9
  04     fds       5

所需数据帧:

1
2
3
4
5
6
7
8
9
  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作为一个老式的家伙)我试图使用iteritems().loc,但没有成功。请帮助!

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


你可以用melt来完成。

1
df.melt(id_vars = ['ID', 'name']).dropna().sort_values('ID')


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

1
2
3
4
5
6
7
8
9
10
11
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

可选地,重命名列:

1
result.rename({'level_2': 'Attribute1', 0: 'value'}, axis=1)