簡體   English   中英

如何用缺失的組合填充行熊貓

[英]How to fill rows with missing combinations pandas

我有以下熊貓數據框:

import pandas as pd
foo = pd.DataFrame({'id': [1,1,1,2,2,2,3,3,3,3,3], 'time': [2,3,5,1,3,4,1,2,6,7,8],
                    'val':['a','a','a','a','a','a','a','a','a','a','a']})

 id time    val
0   1   2   a
1   1   3   a
2   1   5   a
3   2   1   a
4   2   3   a
5   2   4   a
6   3   1   a
7   3   2   a
8   3   6   a
9   3   7   a
10  3   8   a

我想為每個id添加一行,為每個缺失的time添加一行,其中val'b' time將從1開始

生成的數據框看起來像這樣

foo = pd.DataFrame({'id': [1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3], 'time': [1,2,3,4,5,1,2,3,4,1,2,3,4,5,6,7,8],
                    'val':['b','a','a','b','a','a','b','a','a','a','a','b','b','b','a','a','a']})


   id   time    val
0   1   1   b
1   1   2   a
2   1   3   a
3   1   4   b
4   1   5   a
5   2   1   a
6   2   2   b
7   2   3   a
8   2   4   a
9   3   1   a
10  3   2   a
11  3   3   b
12  3   4   b
13  3   5   b
14  3   6   a
15  3   7   a
16  3   8   a

有什么想法我可以在 python 中做到這一點嗎?

這個答案不起作用,因為它沒有考慮 groupby id以及id == 1的事實,我錯過了time == 1

將數據幀的索引設置為time ,然后為每個id重新reindex time列,並用b填充val列中的NaN

(
    foo
    .set_index('time').groupby('id')
    .apply(lambda g: g.reindex(range(1, g.index.max() + 1))) 
    .drop('id', axis=1).fillna({'val': 'b'}).reset_index()
)

如果您想嘗試一些東西:fancy:,這是另一種解決方案:

(
    foo.groupby('id')['time'].max()
      .map(range).explode().add(1).reset_index(name='time')
      .merge(foo, how='left').fillna({'val': 'b'})
)

    id  time val
0    1     1   b
1    1     2   a
2    1     3   a
3    1     4   b
4    1     5   a
5    2     1   a
6    2     2   b
7    2     3   a
8    2     4   a
9    3     1   a
10   3     2   a
11   3     3   b
12   3     4   b
13   3     5   b
14   3     6   a
15   3     7   a
16   3     8   a

一種選擇是完整pyjanitor

# pip install pyjanitor
import pandas as pd
import janitor

# build a range of numbers for each group, starting from 1
new_time = {'time': lambda df: range(1, df.max() + 1)}

foo.complete(new_time, by = 'id', fill_value = 'b')

    id  time val
0    1     1   b
1    1     2   a
2    1     3   a
3    1     4   b
4    1     5   a
5    2     1   a
6    2     2   b
7    2     3   a
8    2     4   a
9    3     1   a
10   3     2   a
11   3     3   b
12   3     4   b
13   3     5   b
14   3     6   a
15   3     7   a
16   3     8   a

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM