可以說我有以下資料集。
import numpy as np
import pandas as pd
d = {'name': ['a', 'a', 'a'], 'year': [2000, 2001, 2002], 'value': [10, 17, 22] }
data_frame = pd.DataFrame(data=d)
data_frame
d1 = {'name': ['a', 'a', 'a'], 'year': [2001, 2002, 2003], 'value': [10, 17, 22] }
data_frame1 = pd.DataFrame(data=d1)
data_frame1
d2 = {'name': ['a', 'a', 'a'], 'year': [2000, 2002, 2003], 'value': [10, 17, 22] }
data_frame2 = pd.DataFrame(data=d2)
data_frame2
我想要做的是:
在
data_frame中,我錯過了 2003 年的觀察結果,因此我想復制包含 2002 年(可用的最早年份)的行,(data_frame[data_frame['year']==2002])將其附加到我data_frame并用 2003 年替換 2002 年。其余保持不變。在
data_frame1中,我錯過了 2000 年的觀察結果,我想做與 1 中相同的操作,但在這種情況下,我想使用包含 2001 年的行。至于
data_frame2,我沒有對 2001 年的觀察。這里我想使用最早的年份,即 ei 2000。
有什么方法可以做到這一點,而不需要單獨檢查每個資料幀,而是撰寫一些通用函式?
謝謝。
uj5u.com熱心網友回復:
與引數一起使用DataFrame.reindex所有年份method='nearest',但 fordata_frame2用于明年:
dfs = [data_frame,data_frame1, data_frame2]
for df in dfs:
df = df.set_index('year').reindex(range(2000, 2004), method='nearest')
print (df)
name value
year
2000 a 10
2001 a 17
2002 a 22
2003 a 22
name value
year
2000 a 10
2001 a 10
2002 a 17
2003 a 22
name value
year
2000 a 10
2001 a 17
2002 a 17
2003 a 22
如果需要上一年,如果存在,最后替換下一年使用:
for df in dfs:
df = df.set_index('year').reindex(range(2000, 2004), method='ffill').bfill()
print (df)
name value
year
2000 a 10
2001 a 17
2002 a 22
2003 a 22
name value
year
2000 a 10.0
2001 a 10.0
2002 a 17.0
2003 a 22.0
name value
year
2000 a 10
2001 a 10
2002 a 17
2003 a 22
每組解決方案:
for df in dfs:
df = (df.set_index('year').groupby('name', group_keys=False)
.apply(lambda x: x.reindex(range(2000, 2004), method='ffill').bfill()))
print (df)
name value
year
2000 a 10
2001 a 17
2002 a 22
2003 a 22
name value
year
2000 a 10.0
2001 a 10.0
2002 a 17.0
2003 a 22.0
name value
year
2000 a 10
2001 a 10
2002 a 17
2003 a 22
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/527449.html
標籤:Python熊猫
