【发布时间】:2021-08-13 03:50:40
【问题描述】:
让我们考虑以下DataFrame
| Name | A | B | C | D |
|---|---|---|---|---|
| tom | 10.0 | NaN | NaN | NaN |
| tom | NaN | 15.0 | NaN | NaN |
| tom | NaN | NaN | 20.0 | NaN |
| tom | NaN | NaN | NaN | 25.0 |
| tom | 30.0 | NaN | NaN | NaN |
| tom | NaN | NaN | NaN | 40.0 |
| john | 1.0 | NaN | NaN | NaN |
| john | NaN | 2.0 | NaN | NaN |
| john | NaN | NaN | 3.0 | NaN |
| john | NaN | NaN | NaN | 4.0 |
| john | 5.0 | NaN | NaN | NaN |
| john | NaN | 6.0 | NaN | NaN |
| john | NaN | NaN | 7.0 | NaN |
| john | NaN | NaN | NaN | 8.0 |
我想折叠它以限制 DataFrame 中 NaN 值的数量 - 可以是连续的,即尽可能组合相邻的行,但我关心的是列的值 A-D 对应于崩溃后同Name
我的完美结局是
| Name | A | B | C | D |
|---|---|---|---|---|
| tom | 10.0 | 15.0 | 20.0 | 25.0 |
| tom | 30.0 | NaN | NaN | 40.0 |
| john | 1.0 | 2.0 | 3.0 | 4.0 |
| john | 5.0 | 6.0 | 7.0 | 8.0 |
据我了解,Pandas groupby('Name') 不会成功,因为它会为每个名称留下一个条目。
如果有任何帮助,我会使用字典来创建数据框。字典是这样的:
{
"a": {
"tom": [10.0, 30.0],
"john": [1.0, 5.0]
},
"b": {
"tom": [15.0],
"john": [2.0, 6.0]
},
.....
}
所以,基本上,我会提取字典中的每个数字,然后用这个数字创建一行,然后合并所有行。
有没有一种简单的方法来折叠生成的 DataFrame 或在给定这样的字典的情况下构建更紧凑的 DataFrame
【问题讨论】:
标签: python pandas dataframe numpy collapse