fillna(method='bfill')とfillna(method='ffill')を組み合わせて出来そうです。
とりあえす質問のケースでは出来ました。他のケースは別途検証してください。
Python
1import pandas as pd
2import io
3import numpy as np
4
5text = """
61,2,3,4,5,6
7A,1,1,1,1,1,
8B,1,,1,1,1,1
9C,1,,,,1,1
10D,1,,,1,,
11"""
12
13df = pd.read_csv(io.StringIO(text))
14df = df.T
15df2 = df.copy().fillna(method='bfill')
16df3 = df.copy().fillna(method='ffill')
17df_result = pd.DataFrame(df2.values * df3.values, index=df.index, columns=df.columns)
18df_result.fillna(0, inplace=True)
19df_result = df_result.T
20df_result = df_result.astype('int')
21print(df_result)
22# 1 2 3 4 5 6
23#A 1 1 1 1 1 0
24#B 1 1 1 1 1 1
25#C 1 1 1 1 1 1
26#D 1 1 1 1 0 0
※下記は1で挟まれているという条件が抜けていました。
処理通りやるなら、iterrors()などでデータフレームの行をループしてその行の値を1個ずつチェックしてく感じでしょうか?データが多いと処理が遅いとは思いますが。
検証はしていませんが、データフレームを転置してdf.fillna(method='bfill')で穴埋めというのはどうでしょうか?