![](/img/trans.png)
[英]Convert pandas dataframe with column containing list of dictionaries to tuple of tuples
[英]Convert a column containing a list of dictionaries to multiple columns in pandas dataframe
我有一個Pandas數據框,如:
pd.DataFrame({'a':[1,2], 'b':[[{'c':1,'d':5},{'c':3, 'd':7}],[{'c':10,'d':50}]]})
Out[2]:
a b
0 1 [{u'c': 1, u'd': 5}, {u'c': 3, u'd': 7}]
1 2 [{u'c': 10, u'd': 50}]
如果'b'中有多個元素,我想擴展'b'列並重復'a'列,如下所示:
Out[2]:
a c d
0 1 1 5
1 1 3 7
2 2 10 50
我嘗試在每一行使用apply函數,但我沒有成功,顯然應用將一行轉換為一行。
你可以使用concat
和list comprehension
:
df = pd.concat([pd.DataFrame(x) for x in df['b']], keys=df['a'])
.reset_index(level=1, drop=True).reset_index()
print (df)
a c d
0 1 1 5
1 1 3 7
2 2 10 50
編輯:
如果index是唯一的,則可以對所有列使用join
:
df1 = pd.concat([pd.DataFrame(x) for x in df['b']], keys=df.index)
.reset_index(level=1,drop=True)
df = df.drop('b', axis=1).join(df1).reset_index(drop=True)
print (df)
a c d
0 1 1 5
1 1 3 7
2 2 10 50
我嘗試簡化解決方案:
l = df['b'].str.len()
df1 = pd.DataFrame(np.concatenate(df['b']).tolist(), index=np.repeat(df.index, l))
df = df.drop('b', axis=1).join(df1).reset_index(drop=True)
print (df)
a c d
0 1 1 5
1 1 3 7
2 2 10 50
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.