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导入,这是一个标准约定