![](/img/trans.png)
[英]Replace a row in a pandas DataFrame with a dict item based on a unique column value
[英]Turn pandas dataframe row in to a column based on unique IDs
我有一个与下面类似的数据框。 “ Song obj”实际上是一首包含有关歌曲的各种信息的嵌套字典。
{data:{album:{album name:---, album id:---}},track{track name:---,track id:---}}
有些播放列表很长,因此最多有400列,每列标有一个整数。
df = pd.DataFrame({"playlist id" : {0 : 8179, 1:8764, 2:8776},
0 : {0:"song obj",1:"song obj",2:"song obj"},
1: {0:"song obj",1:"song obj",2:"song obj"},
2 : {0:"song obj",1:"song obj",2:"song obj"}
})
看起来像这样:
>>>
playlist id rating 0 1 2
0 8179 3 song obj 1 song obj 2 song obj 3
1 8764 2 song obj 4 song obj 5 NaN
2 8776 4 song obj 6 song obj 7 song obj 8
我正在尝试使上面的数据框看起来像这样,所有“歌曲对象”都是垂直的,但紧挨着它们对应的播放列表编号,例如下面的数据框:
df1=pd.DataFrame({
"playlist id": {0: 8179,1:8179,2:8179,3:8764,4:8764,
5:8776,6:8776,7:8776},
"rating": {0:3, 1:3, 2:3, 3:2, 4:2, 5:4, 6:4, 7:4},
"song objects": {0:"song obj 1", 1:"song obj 2", 2:"song obj 3",
3:"song obj 4", 4:"song obj 5",5:"song obj 6",
6:"song obj 7",7:"song obj 8"}
})
>>>
playlist id rating song objects
0 8179 3 song obj 1
1 8179 3 song obj 2
2 8179 3 song obj 3
3 8764 2 song obj 4
4 8764 2 song obj 5
5 8776 4 song obj 6
6 8776 4 song obj 7
7 8776 4 song obj 8
我尝试过使用pd.wide_to_long
和pd.melt
但到目前为止我还没有运气。 我也尝试过在堆栈交换上进行搜索,但是因为我是Programming / python / pandas的新手,所以我没有正确的术语来找到我所需要的..请帮忙!
注意:原因是因为最终我想将“歌曲对象”“解包”到新的列中。 我认为这有可能
df2=pd.concat([df2.drop(['song objects'], axis=1), df2['song objects'].apply(pd.Series)], axis=1)
您将不得不对此稍作修改,因为示例代码不会产生您所指示的输出,例如“ rating
列。
import pandas as pd
df = pd.DataFrame({"playlist id" : {0 : 8179, 1:8764, 2:8776},
0 : {0:"song obj",1:"song obj",2:"song obj"},
1: {0:"song obj",1:"song obj",2:"song obj"},
2 : {0:"song obj",1:"song obj",2:"song obj"}
})
pd.melt(df, id_vars = ['playlist id'], value_vars = [0, 1, 2])
输出:
playlist id variable value
0 8179 0 song obj
1 8764 0 song obj
2 8776 0 song obj
3 8179 1 song obj
4 8764 1 song obj
5 8776 1 song obj
6 8179 2 song obj
7 8764 2 song obj
8 8776 2 song obj
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.