Вы можете использовать метод fillna
в DataFrame и указать метод как ffill
(форвардная заливка):
>>> df = pd.DataFrame([[1, 2, 3], [4, None, None], [None, None, 9]])
>>> df.fillna(method='ffill')
0 1 2
0 1 2 3
1 4 2 3
2 4 2 9
Этот метод ...
распространять [s] последнее действительное наблюдение вперед к следующему действительному
blockquote>. Чтобы перейти в другую сторону, существует также метод
bfill
.Этот метод не изменяет DataFrame inplace - вам нужно будет перестроить возвращаемый DataFrame в переменную или указать
inplace=True
:df.fillna(method='ffill', inplace=True)
Есть три способа сделать это; либо вы можете использовать [XmlInclude]
против типа, либо вы можете использовать XmlElement
/ XmlArrayItem
против свойства. Все они показаны ниже; раскомментируйте пару, которую вы предпочитаете:
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
public class MyWrapper {
//2: [XmlElement("A", Type = typeof(ChildA))]
//2: [XmlElement("B", Type = typeof(ChildB))]
//3: [XmlArrayItem("A", Type = typeof(ChildA))]
//3: [XmlArrayItem("B", Type = typeof(ChildB))]
public List<ChildClass> Data { get; set; }
}
//1: [XmlInclude(typeof(ChildA))]
//1: [XmlInclude(typeof(ChildB))]
public abstract class ChildClass {
public string ChildProp { get; set; }
}
public class ChildA : ChildClass {
public string AProp { get; set; }
}
public class ChildB : ChildClass {
public string BProp { get; set; }
}
static class Program {
static void Main() {
var ser = new XmlSerializer(typeof(MyWrapper));
var obj = new MyWrapper {
Data = new List<ChildClass> {
new ChildA { ChildProp = "abc", AProp = "def"},
new ChildB { ChildProp = "ghi", BProp = "jkl"}}
};
ser.Serialize(Console.Out, obj);
}
}
Для этого вы можете использовать XmlIncludeAttribute . Или посмотрите этот пост по другому пути.