[英]Fill missing data in pandas based on another column
我之前有過這個數據框,其中缺少numbers
和level3
中的數據,它們在 dtypes (int + str) 中都不同。 我希望根據Org
列填充數據。 對於每個Org
ID, numbers
和level3
中的數據始終相同。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.