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作为一个老式的家伙)我试图使用
1 2 3 | import pandas as pd df = pd.DataFrame(raw_data) for row in df.iterrows(): |
你可以用
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) |