假设我有一个数据帧df1:
A B C D E
Date
2009-01-30 NaN NaN NaN NaN NaN
2009-02-02 NaN NaN NaN NaN NaN
2009-02-03 NaN NaN NaN NaN NaN
2009-02-04 NaN NaN NaN NaN NaN
2009-02-05 NaN NaN NaN NaN NaN
2009-02-06 NaN NaN NaN NaN NaN
2009-02-09 NaN NaN NaN NaN NaN
2009-02-10 NaN NaN NaN NaN NaN
和一系列:
Date
2009-02-04 A
2009-02-06 E
是否有一个快速矢量化视图来设置df1中的索引/列值以获得df2:
A B C D E
Date
2009-01-30 NaN NaN NaN NaN NaN
2009-02-02 NaN NaN NaN NaN NaN
2009-02-03 NaN NaN NaN NaN NaN
2009-02-04 1 NaN NaN NaN NaN
2009-02-05 NaN NaN NaN NaN NaN
2009-02-06 NaN NaN NaN NaN 1
2009-02-09 NaN NaN NaN NaN NaN
2009-02-10 NaN NaN NaN NaN NaN
答案 0 :(得分:1)
import numpy as np
import pandas as pd
df1 = pd.DataFrame(np.nan, columns=list('ABCDE'), index=pd.to_datetime(
['2009-01-30', '2009-02-02', '2009-02-03', '2009-02-04', '2009-02-05',
'2009-02-06', '2009-02-09', '2009-02-10']))
ser = pd.Series(list('AE'), index=pd.to_datetime(['2009-02-04', '2009-02-06']))
freqs = pd.get_dummies(ser)
freqs = freqs.where(freqs != 0, np.nan)
result = df1.add(freqs, fill_value=0)
print(result)
pd.get_dummies可用于将您的系列转换为频率表:
In [117]: freqs = pd.get_dummies(ser)
In [118]: freqs = freqs.where(freqs != 0, np.nan)
In [119]: freqs
Out[119]:
col_0 A E
row_0
2009-02-04 1 NaN
2009-02-06 NaN 1
可以使用DataFrame.add
method将这些值添加到df1
:
In [124]: df1.add(freqs, fill_value=0)
Out[124]:
A B C D E
2009-01-30 NaN NaN NaN NaN NaN
2009-02-02 NaN NaN NaN NaN NaN
2009-02-03 NaN NaN NaN NaN NaN
2009-02-04 1 NaN NaN NaN NaN
2009-02-05 NaN NaN NaN NaN NaN
2009-02-06 NaN NaN NaN NaN 1
2009-02-09 NaN NaN NaN NaN NaN
2009-02-10 NaN NaN NaN NaN NaN