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.