簡體   English   中英

根據另一列填充 pandas 中的缺失數據

[英]Fill missing data in pandas based on another column

我之前有過這個數據框,其中缺少numberslevel3中的數據,它們在 dtypes (int + str) 中都不同。 我希望根據Org列填充數據。 對於每個Org ID, numberslevel3中的數據始終相同。

numbers = [np.nan, 5, 5, 5, np.nan,55,np.nan,55,55,np.nan,555,np.nan,555,555,np.nan]
Org = [1, 1, 1, 1, 1,2, 2, 2, 2, 2,3, 3, 3, 3, 3]
level3 = ["test", np.nan, "test", "test", np.nan, "failed", np.nan, "failed", "failed", "failed",np.nan,'try harder','try harder',np.nan,np.nan]
d = {'col1': numbers, 'col2': Org,'col3':level3}
inital = pd.DataFrame(data = d)

我想要的 output 如下:

numbers = [5, 5, 5, 5, 5,55,55,55,55,55,555,555,555,555,555]
Org = [1, 1, 1, 1, 1,2, 2, 2, 2, 2,3, 3, 3, 3, 3]
level3 = ["test", "test", "test", "test", "test", "failed", "failed", "failed", "failed", "failed",'try harder','try harder','try harder','try harder','try harder']
d = {'col1': numbers, 'col2': Org,'col3':level3}
final = pd.DataFrame(data = d)

我首先創建了一個非常長的循環來查看組織是否相同,然后應用 -1 或 -2 或 -3 或 +1 或 + 2 或 +3 值(如果它不為空)。 盡管如此,它似乎效率低得離譜,而且效果也不理想,所以我想我來這里看看是否有人有什么技巧可以教我。

謝謝

我們試試看

inital[['col1', 'col3']] = inital.groupby('col2').apply(lambda g: g[['col1', 'col3']].ffill().bfill())
print(inital)

     col1  col2        col3
0     5.0     1        test
1     5.0     1        test
2     5.0     1        test
3     5.0     1        test
4     5.0     1        test
5    55.0     2      failed
6    55.0     2      failed
7    55.0     2      failed
8    55.0     2      failed
9    55.0     2      failed
10  555.0     3  try harder
11  555.0     3  try harder
12  555.0     3  try harder
13  555.0     3  try harder
14  555.0     3  try harder

試試下面的代碼 - 您可以刪除不需要的列:

inital.assign(new_col3 = inital.groupby(['col2'])['col3'].transform('first'),
              new_col1 = inital.groupby(['col2'])['col1'].transform('max')
)

Output:

在此處輸入圖像描述

暫無
暫無

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

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