0
我有這種格式的數據:pandas |傳播價值觀所有日期
key1 key2 from_date to_date value
我想將其轉換爲這種格式:
key1 key2 date value
其中的日期欄應包含所有相同的「價值」從from_date到to_date之間的日期。
在熊貓做這件事的最好方法是什麼?
我有這種格式的數據:pandas |傳播價值觀所有日期
key1 key2 from_date to_date value
我想將其轉換爲這種格式:
key1 key2 date value
其中的日期欄應包含所有相同的「價值」從from_date到to_date之間的日期。
在熊貓做這件事的最好方法是什麼?
您可以使用:
concat
由原始df
date_range
join
列上創建Series
通過index
print (df)
key1 key2 from_date to_date value
0 a g 2017-01-01 2017-01-05 100
1 r h 2017-02-01 2017-02-03 50
print (df.dtypes)
key1 object
key2 object
from_date datetime64[ns]
to_date datetime64[ns]
value int64
dtype: object
df1 = pd.concat([pd.Series(r.Index,
pd.date_range(r.from_date, r.to_date))
for r in df.itertuples()]).reset_index()
df1.columns = ['date','idx']
print (df1)
date idx
0 2017-01-01 0
1 2017-01-02 0
2 2017-01-03 0
3 2017-01-04 0
4 2017-01-05 0
5 2017-02-01 1
6 2017-02-02 1
7 2017-02-03 1
df2 = df1.set_index('idx').join(df[['key1','key2', 'value']]).reset_index(drop=True)
df2 = df2.reindex(columns=['key1','key2','date', 'value'])
print (df2)
key1 key2 date value
0 a g 2017-01-01 100
1 a g 2017-01-02 100
2 a g 2017-01-03 100
3 a g 2017-01-04 100
4 a g 2017-01-05 100
5 r h 2017-02-01 50
6 r h 2017-02-02 50
7 r h 2017-02-03 50