如何根据列值在数据框中将单行分成多行?

时间:2019-04-03 02:17:45

标签: python pandas

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

原始数据框:

i, j = input().split()

i = int(i)
j = float(j)
if(i % 5 == 0 and i + 0.50 < j):
    r = j - 0.50 - i
    print("%.2f"%r)
else:
    print("%.2f"%j)

所需的数据框:

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

我是熊猫数据分析的新手。 (作为老式人经常使用VBA)我尝试使用 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 iteritems(),但没有成功。请帮忙!

.loc

2 个答案:

答案 0 :(得分:1)

您可以使用def shell_pressed_enter(): code_line_run = shell.get(shell_line_number)

melt

答案 1 :(得分:0)

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

{'amt_coffee': 7.0, 'cust': u'333', 'nbr_coffee': 2}
{'amt_coffee': 0, 'cust': u'222', 'nbr_coffee': 0}
{'amt_coffee': 3.5, 'cust': u'111', 'nbr_coffee': 1}
{'nbr_gas_station': 0, 'cust': u'333', 'amt_gas_station': 0}
{'nbr_gas_station': 2, 'cust': u'222', 'amt_gas_station': 87.5}
{'nbr_gas_station': 0, 'cust': u'111', 'amt_gas_station': 0}

(可选)重命名列:

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