考慮下表:
Value1 Value2
1 1
1 2
1 3
2 7
2 8
2 9
... ...
100 1
100 2
100 3
列 Value1 包含數字 1 到 100 的三元組。列 Value2 包含亂數。我想知道如何為每組三元組應用一個函式并將它們的結果附加在一起。
例如,考慮一個名為“Interpolate”的示例函式,它將每組三元組線性插入五行,僅影響列 Value2。結果將是:
Value1 Value2
1 1
1 1.5
1 2
1 2.5
1 3
2 7
2 7.5
2 8
2 8.5
2 9
... ...
uj5u.com熱心網友回復:
您可以groupby“Value1”并將函式應用于每個組:
def interpolate(x):
# change index to even numbers
x.index = range(0, 2*len(x), 2)
# add NaN rows for odd indices
x = x.reindex(range(2*len(x)-1))
# interpolate
x = x.interpolate()
return x
out = df.groupby('Value1').apply(interpolate).droplevel(0)
上面的代碼作為單行代碼:
out = df.groupby('Value1').apply(lambda x: x.set_axis(range(0, 2*len(x), 2)).reindex(range(2*len(x)-1))).interpolate().droplevel(0)
輸出:
Value1 Value2
0 1.0 1.0
1 1.0 1.5
2 1.0 2.0
3 1.0 2.5
4 1.0 3.0
0 2.0 7.0
1 2.0 7.5
2 2.0 8.0
3 2.0 8.5
4 2.0 9.0
0 100.0 1.0
1 100.0 1.5
2 100.0 2.0
3 100.0 2.5
4 100.0 3.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/412112.html
標籤:
