考虑以下示例DataFrame:
In [227]: dfrm
Out[227]:
A B C D E
0 0.531428 0.045863 0.848619 1 2012-11-01
1 0.723965 0.508678 0.342828 2 2012-11-02
2 0.173907 0.962761 0.918959 2 2012-11-03
3 0.280061 0.067503 0.277317 1 2012-11-04
4 0.107908 0.949389 0.192078 1 2012-11-05
5 0.029907 0.240504 0.151579 1 2012-12-01
6 0.633516 0.217710 0.491811 2 2012-12-02
7 0.983545 0.450685 0.381446 1 2012-12-03
8 0.587426 0.833778 0.058891 2 2012-12-04
9 0.184342 0.664248 0.220923 1 2012-12-05
In [228]: dfrm.set_index(['E', 'D'])
Out[228]:
A B C
E D
2012-11-01 1 0.531428 0.045863 0.848619
2012-11-02 2 0.723965 0.508678 0.342828
2012-11-03 2 0.173907 0.962761 0.918959
2012-11-04 1 0.280061 0.067503 0.277317
2012-11-05 1 0.107908 0.949389 0.192078
2012-12-01 1 0.029907 0.240504 0.151579
2012-12-02 2 0.633516 0.217710 0.491811
2012-12-03 1 0.983545 0.450685 0.381446
2012-12-04 2 0.587426 0.833778 0.058891
2012-12-05 1 0.184342 0.664248 0.220923
In [229]: dfrm.set_index(['E', 'D']).A.unstack(level=1)
Out[229]:
D 1 2
E
2012-11-01 0.531428 NaN
2012-11-02 NaN 0.723965
2012-11-03 NaN 0.173907
2012-11-04 0.280061 NaN
2012-11-05 0.107908 NaN
2012-12-01 0.029907 NaN
2012-12-02 NaN 0.633516
2012-12-03 0.983545 NaN
2012-12-04 NaN 0.587426
2012-12-05 0.184342 NaN
现在,假设在最后一个示例中,我想用新行扩充DataFrame,这将是第一行。
我会为它编制一个索引值,比如说datetime.date(2012, 10, 30)
,这样它就会略微超出现有的第一行。我将只传递两个值的列表,例如[0.0, 0.0]
作为第一行的值。
如何将此结构附加到DataFrame 的顶部,而不构建具有相同列/索引命名的临时结构。
我在输出中寻找的是:
D 1 2
E
2012-10-30 0.000000 0.000000
2012-11-01 0.531428 NaN
2012-11-02 NaN 0.723965
2012-11-03 NaN 0.173907
2012-11-04 0.280061 NaN
2012-11-05 0.107908 NaN
2012-12-01 0.029907 NaN
2012-12-02 NaN 0.633516
2012-12-03 0.983545 NaN
2012-12-04 NaN 0.587426
2012-12-05 0.184342 NaN
没有必须手动创建这样的临时结构:
pandas.DataFrame({"E":[datetime.date(2012, 10, 30)],
1:[0.0],
2:[0.0]).set_index("E")
(并使用列索引的名称“D”进行讨论)然后使用pandas.concat
或DataFrame.append
)。
我正在寻找只是“插入”任何数据的东西 - 只要求值的元组具有正确的形状以具有索引值和每个列的值,然后它只是推动将数据定位到这些列中。
在很多搜索中,我在pandas中找不到这个功能。
假设它被称为insert_row
我正在寻找某种类型的界面:
data_frame.insert_row((datetime.date(2012, 10, 30), 0.0, 0.0))
我可以通过索引重新排序以使其达到顶部,但主要的一点是我想提供一个形状正确的tuple
,其中第一个元素将被假定为索引,其余假设位置列,不需要名称或索引结构。
答案 0 :(得分:2)
使用DataFrame.ix[index] = row
添加行。
import pandas as pd
df = pd.DataFrame({"A":[1,2,3], "B":[4,5,6]}, index=list("xyz"))
df.ix["t"] = [10, 20]
我认为它会复制整个数据,不要重复这样做。