Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫在重塑数据帧时取消堆叠。_Python_Pandas_Dataframe - Fatal编程技术网

Python 熊猫在重塑数据帧时取消堆叠。

Python 熊猫在重塑数据帧时取消堆叠。,python,pandas,dataframe,Python,Pandas,Dataframe,我有这个示例数据帧 ID1,ID2,info,Value 1,50,BA,101 1,50,BA,102 2,100,CA,03 2,100,CA,07 2,100,BA,09 2,100,BA,10 为了改变数据的形状,我使用了unstack,这更像是我想要的90%,而且很有效 grouped = df.groupby(['ID1','ID1','ID2','info'])[['Value']].apply(lambda x: pd.DataFrame(x.values, columns=[

我有这个示例数据帧

ID1,ID2,info,Value
1,50,BA,101
1,50,BA,102
2,100,CA,03
2,100,CA,07
2,100,BA,09
2,100,BA,10
为了改变数据的形状,我使用了unstack,这更像是我想要的90%,而且很有效

grouped = df.groupby(['ID1','ID1','ID2','info'])[['Value']].apply(lambda x: pd.DataFrame(x.values, columns=[['Value']]))\
                        .unstack().sort_index(level=1, axis=1).reset_index(drop= True, level=1).reset_index()

grouped.columns = ['{}{}'.format(a,b) for a, b in df_grouped.columns]
这就是我得到的结果

ID1,ID2,info,Value0,Value1
1,50,BA,101,102
2,100,BA,9,10
2,100,CA,3,7
如果我能把所有的ID1放在一行中,如果我有两个不同的信息值对应于ID1,可能会更清楚,那么我想实现类似的效果

ID1,ID2,info,Value0,Value1,Value2,Value3
1,50,BA,101,102,,
2,100,[BA,CA],9,10,3,7

有什么建议吗

您的解决方案应首先通过聚合列表进行更改,然后,如果需要,只有列表的唯一值才能将值转换为集合并返回到列表,并从另一列创建数据帧,该数据帧将返回:

grouped = df.groupby(['ID1','ID1','ID2']).agg(list)

grouped['info'] = grouped['info'].apply(lambda x: list(set(x)))

df1 = pd.DataFrame(grouped.pop('Value').values.tolist(),
                   index=grouped.index).add_prefix('Value')
grouped = grouped.join(df1)
print (grouped)
                 info  Value0  Value1  Value2  Value3
ID1 ID1 ID2                                          
1   1   50       [BA]     101     102     NaN     NaN
2   2   100  [BA, CA]       3       7     9.0    10.0