Python 如何将字典列表转换为具有特定条件的数据帧?
假设我有一个字典列表:Python 如何将字典列表转换为具有特定条件的数据帧?,python,pandas,dataframe,Python,Pandas,Dataframe,假设我有一个字典列表: list_dict = [{0: 0.1, 1: 0.2, 2: 0.3, 3: 0.4, 'Product': 'A'}, {0: 0.5, 1: 0.6, 2: 0.7, 3: 0.8, 4: 0.9, 'Product': 'B'}, {0: 1.1, 1: 1.2, 'Product': 'C'}] 我想把它做成数据框,就像 |State | Probability |Product| |---------|---------------|---
list_dict =
[{0: 0.1, 1: 0.2, 2: 0.3, 3: 0.4, 'Product': 'A'},
{0: 0.5, 1: 0.6, 2: 0.7, 3: 0.8, 4: 0.9, 'Product': 'B'},
{0: 1.1, 1: 1.2, 'Product': 'C'}]
我想把它做成数据框,就像
|State | Probability |Product|
|---------|---------------|-------|
|0 |0.1 |A |
|1 |0.2 |A |
|2 |0.3 |A |
|3 |0.4 |A |
|0 |0.5 |B |
|1 |0.6 |B |
|2 |0.7 |B |
|3 |0.8 |B |
|4 |0.9 |B |
|0 |1.1 |C |
|1 |1.2 |C |
有人能帮我怎么做吗?我尝试了pd.DataFramelist\u dict,但输出与dataframe不同。
> pd.DataFrame(list_dict)
0 1 2 3 Product 4
0 0.1 0.2 0.3 0.4 A NaN
1 0.5 0.6 0.7 0.8 B 0.9
2 1.1 1.2 NaN NaN C NaN
您可以使用melt组合列并删除不完整的行,这将宽列[1,2,3,4]变成长列
后跟dropna以删除不完整/未指定的行
> pd.melt(pd.DataFrame(list_dict), id_vars=["Product"], var_name="State", value_name="Probability").dropna()
Product State Probability
0 A 0 0.1
1 B 0 0.5
2 C 0 1.1
3 A 1 0.2
4 B 1 0.6
5 C 1 1.2
6 A 2 0.3
7 B 2 0.7
9 A 3 0.4
10 B 3 0.8
13 B 4 0.9
从数据帧
> pd.DataFrame(list_dict)
0 1 2 3 Product 4
0 0.1 0.2 0.3 0.4 A NaN
1 0.5 0.6 0.7 0.8 B 0.9
2 1.1 1.2 NaN NaN C NaN
您可以使用melt组合列并删除不完整的行,这将宽列[1,2,3,4]变成长列
后跟dropna以删除不完整/未指定的行
> pd.melt(pd.DataFrame(list_dict), id_vars=["Product"], var_name="State", value_name="Probability").dropna()
Product State Probability
0 A 0 0.1
1 B 0 0.5
2 C 0 1.1
3 A 1 0.2
4 B 1 0.6
5 C 1 1.2
6 A 2 0.3
7 B 2 0.7
9 A 3 0.4
10 B 3 0.8
13 B 4 0.9
您可以使用.groupby后跟.applyunstack,但需要进行一些清理:
df = pd.DataFrame(list_dict)
df = df.groupby('Product').apply(pd.DataFrame.unstack).reset_index().drop(columns='level_2')
df = df.replace('Product', np.nan).dropna().rename(columns={'level_1': 'State', 0: 'Probability'})
您可以使用.groupby后跟.applyunstack,但需要进行一些清理:
df = pd.DataFrame(list_dict)
df = df.groupby('Product').apply(pd.DataFrame.unstack).reset_index().drop(columns='level_2')
df = df.replace('Product', np.nan).dropna().rename(columns={'level_1': 'State', 0: 'Probability'})
备选方案:df.set_index'Product'.stack.reset_index.renamecolumns={'level_1':'State',0:'Probability'}使用堆栈+1可选:df.set_index'Product'。stack.reset_index.renamecolumns={'level_1':'State',0:'Probability'}使用堆栈+1.