我有这个数据框
temp = pd.DataFrame({'Person': ['P1', 'P2'], 'Dictionary': [{'value1': 0.31, 'value2': 0.304}, {'value2': 0.324}]})
Person Dictionary
0 P1 {'value1': 0.31, 'value2': 0.304}
1 P2 {'value2': 0.324}
Run Code Online (Sandbox Code Playgroud)
我想要这种格式的输出:
temp1 = pd.DataFrame({'Person': ['P1', 'P1', 'P2'], 'Values_Number': ['value1', 'value2', 'value2'], 'Values': [0.31, 0.304, 0.324]})
Run Code Online (Sandbox Code Playgroud)
我尝试使用这个:
temp['Dictionary'].apply(pd.Series).T.reset_index()
Run Code Online (Sandbox Code Playgroud)
Person Values_Number Values
0 P1 value1 0.310
1 P1 value2 0.304
2 P2 value2 0.324
Run Code Online (Sandbox Code Playgroud)
但我无法将其与之前的数据框连接起来。此外,我们也会有犯错误的机会。
IIUC,我们可以使用它Series.tolist来构建一个DataFrame我们可以使用的melt新系统DataFrame.melt
new_df = (pd.DataFrame(temp[\'Dictionary\'].tolist(), index=temp[\'Person\'])\n .reset_index()\n .melt(\'Person\', var_name=\'Values_Number\', value_name=\'Values\')\n .dropna()\n .reset_index(drop=True))\nprint(new_df)\nRun Code Online (Sandbox Code Playgroud)\n\n Person Values_Number Values\n0 P1 value1 0.310\n1 P1 value2 0.304\n2 P2 value2 0.324\nRun Code Online (Sandbox Code Playgroud)\n\n它的使用效率pd.DataFrame(df[\'Dictionary\'].tolist())比.apply(pd.Series). 您可以看到何时应该apply在代码中使用here
这是结果apply(pd.Series)这是在本出版物中获得
%timeit s.apply(pd.Series)\n%timeit pd.DataFrame(s.tolist())\n\n2.65 ms \xc2\xb1 294 \xc2\xb5s per loop (mean \xc2\xb1 std. dev. of 7 runs, 100 loops each)\n816 \xc2\xb5s \xc2\xb1 40.5 \xc2\xb5s per loop (mean \xc2\xb1 std. dev. of 7 runs, 1000 loops each)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
961 次 |
| 最近记录: |