2

我有一个数据框,例如:

|   | a | b                |
|---|---|------------------|
| 0 | a | {'d': 1, 'e': 2} |
| 1 | b | {'d': 3, 'e': 4} |
| 2 | c | NaN              |
| 3 | d | {'f': 5}         |
| 4 | d | {'e':8,'f': 5}   |
| 5 | d | {'e':9,'f': 5}   |
| 6 | d | {'f': 7}         |

我正在使用df.join(pd.DataFrame.from_records(df['b'].mask(df.b.isna(), {}).tolist())) 如何从同一数据框中的字典键创建列中的以下代码?并得到如下结果:

|   | a | b                | d | e | f |
|---|---|------------------|---|---|---|
| 0 | a | {'d': 1, 'e': 2} | 1 | 2 |nan|
| 1 | b | {'d': 3, 'e': 4} | 3 | 8 |nan|
| 2 | c | NaN              |nan|nan|nan|
| 3 | d | {'f': 5}         |nan|nan| 5 |
| 4 | d | {'e':8,'f': 5}   |nan| 4 | 5 |
| 5 | d | {'e':9,'f': 5}   |nan|nan| 5 |
| 6 | d | {'f': 7}         |nan|nan| 7 |

为什么e中的值是随机分配的,而不是相邻的行?我该如何解决这个问题?

提前致谢!

4

1 回答 1

1

原因应该是原始 DataFrame 没有 default RangeIndex,所以 afterjoin被错误地分配DataFrame了 new ,它默认具有默认索引。

df.index您需要通过正确对齐新 DataFrame 来设置索引值。

df.join(pd.DataFrame(df['b'].mask(df.b.isna(), {}).tolist(), index=df.index))
于 2021-06-22T04:54:32.820 回答