簡體   English   中英

給定一系列索引和相應的列名,如何設置數據框的值?

[英]How to set the values of a dataframe given a series of indices and corresponding column names?

假設我有一個數據框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
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方法將這些值添加到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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM