Pandas interpolieren schnell und gleichmäßig basierend auf der Differenz einer Spalte – interpolate

Prinzip

Zeilenindex ändern, Nullwert füllen, interpolieren

erreichen

1. Rohdaten

data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
df = pd.DataFrame(data, columns=['one', 'two', 'threed', 'four'])
print(df)

初始df
   one  two  threed  four
0    1    2       3     4
1    5    6       7     8
2    9   10      11    12

2. Initialisieren Sie einige Variablen

# 新建一个列表,长度为df的行长,用于改变df的行索引
index_list = [i for i in range(0, len(df))]
# 计数总和,用于累计每一行之间的差值,然后给列表的每个元素加上
count = 1
# 遍历的前一个one列的值,初始为one第一个
pre = df.iloc[0]['one']
# 用于访问列表的变量
i = 0

3. Ändern Sie die Zeilenindexliste

for row in df.itertuples():
    now = getattr(row, "one")  # 获取当前one列的值
    diff = now - pre  # 当前行和前一行的差值
    pre = now  # 将当前行的值赋给pre下一次使用
    count = int(count + diff - 1)  # 累计diff的差值,因为1-5之间差值为4,但是只需要插入3个数,所以-1
    index_list[i] += count  # 给索引列表每个元素赋值
    i += 1

4. Interpolation

df.index = index_list  # 修改索引,和one列一一对应
df = df.reindex(index=range(index_list[len(index_list) - 1] + 1))  # 重置索引,1-5中间插入3个空行
df.interpolate(method='linear', axis=0, limit=20, inplace=True)  # 使用插值函数直接插值
df = df.astype(int)  # 改变数据类型,插值函数会把整数全部改为浮点数
print(df)
输出:
   one  two  threed  four
0    1    2       3     4
1    2    3       4     5
2    3    4       5     6
3    4    5       6     7
4    5    6       7     8
5    6    7       8     9
6    7    8       9    10
7    8    9      10    11
8    9   10      11    12

5. Gesamtcode: Sie können ihn direkt kopieren und ausführen, um das Ergebnis anzuzeigen

import pandas as pd

if __name__ == '__main__':
    data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
    df = pd.DataFrame(data, columns=['one', 'two', 'threed', 'four'])
    print(df)
    index_list = [i for i in range(0, len(df))]
    count = 1
    pre = df.iloc[0]['one']
    i = 0
    for row in df.itertuples():
        now = getattr(row, "one")
        diff = now - pre
        pre = now
        count = int(count + diff - 1)
        index_list[i] += count
        i += 1
    df.index = index_list
    df = df.reindex(index=range(index_list[len(index_list) - 1] + 1))
    df.interpolate(method='linear', axis=0, limit=20, inplace=True)
    df = df.astype(int)
    print(df)

Zusammenfassen

1. Die Interpolationsfunktion ist sehr leistungsstark. Sie verwendet nur lineare Interpolation. Sie kann auch für Datumsvariablen verwendet werden.
2. Die Interpolationsfunktion kann nur eine lineare Interpolation für Nan zwischen zwei Zeilen durchführen.

おすすめ

転載: blog.csdn.net/weixin_44440669/article/details/125995679