在附加到datafram时创建新列

2024-10-01 15:48:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个约12000列和几百行的数据帧,如下所示:

Date     id1    id2    id3    id4    ...    id12000
1/4/16   100    78     103.5  15            35
1/5/16   100.5  78     104    16            37
1/6/16   99.5   78.5   104.5  16.5          37
1/7/16   100.1  77     104.2  13            37
1/8/16   100.3  76.5   104.2  13.5          33
1/11/16  99.8   77     103.7  13.5          34
...
5/1/17   101.1  82     103.6  12            33

每天,我都会得到一个新的数据帧,需要添加到这个数据帧中。例如,我可能会得到一个5月2日的数据帧,如下所示:

Date     id1    id3    id4    id6    ...    id12100
5/2/17   100    103    12.5   15            100

但这个数据帧可能每天都会包含一些新的ID(列),而且它也可能会忽略一些以前存在的ID。你知道吗

我希望我的新dataframe在每次有新ID时都添加列,并用NaN填充该列以前的所有值。我还希望以前在dataframe中的ID的任何单元格都用NaN填充。因此,例如,上面两个示例dataframe的连接如下所示:

Date     id1    id2    id3    id4    ...    id12000   id12100
1/4/16   100    78     103.5  15            35        NaN
1/5/16   100.5  78     104    16            37        NaN
1/6/16   99.5   78.5   104.5  16.5          37        NaN
1/7/16   100.1  77     104.2  13            37        NaN
1/8/16   100.3  76.5   104.2  13.5          33        NaN
1/11/16  99.8   77     103.7  13.5          34        NaN
...
5/1/17   101.1  82     103.6  12            33        NaN
5/2/17   100    NaN    103    12.5          NaN       100

但是,如果我在数据帧中已经存在的日期上运行它,我只想用新值替换旧值。你知道吗

我已经为这个问题争论了一段时间了,我不太明白我需要怎么做,在正确格式化日期以便检查数据帧中是否有重复的数据帧之间,正确地附加/加入/合并旧值和新值等。我有几个不同的地方,其中一个广义函数将是真正有用的我,所以我希望有人有同样的问题,有一个优雅的解决方案,我可以使用。你知道吗

提前谢谢!你知道吗


Tags: 数据id示例dataframedatenanid3id2
2条回答

我认为您需要^{}确保Date是两个数据帧中的索引:

print(df)

           id1   id2    id3   id4  id12000
Date                                      
1/4/16   100.0  78.0  103.5  15.0       35
1/5/16   100.5  78.0  104.0  16.0       37
1/6/16    99.5  78.5  104.5  16.5       37
1/7/16   100.1  77.0  104.2  13.0       37
1/8/16   100.3  76.5  104.2  13.5       33
1/11/16   99.8  77.0  103.7  13.5       34
5/1/17   101.1  82.0  103.6  12.0       33

print(df_new)

        id1  id3   id4  id6  id12100
Date                                
5/2/17  100  103  12.5   15      100

使用日期作为索引的combine_first

df_out = df_new.combine_first(df)
print(df_out)

输出:

           id1  id12000  id12100   id2    id3   id4   id6
Date                                                     
1/11/16   99.8     34.0      NaN  77.0  103.7  13.5   NaN
1/4/16   100.0     35.0      NaN  78.0  103.5  15.0   NaN
1/5/16   100.5     37.0      NaN  78.0  104.0  16.0   NaN
1/6/16    99.5     37.0      NaN  78.5  104.5  16.5   NaN
1/7/16   100.1     37.0      NaN  77.0  104.2  13.0   NaN
1/8/16   100.3     33.0      NaN  76.5  104.2  13.5   NaN
5/1/17   101.1     33.0      NaN  82.0  103.6  12.0   NaN
5/2/17   100.0      NaN    100.0   NaN  103.0  12.5  15.0
In [43]: df
Out[43]:
     Date    id1   id2    id3   id4
0  1/4/16  100.0  78.0  103.5  15.0
1  1/5/16  100.5  78.0  104.0  16.0
2  1/6/16   99.5  78.5  104.5  16.5

In [44]: new
Out[44]:
     Date  id1  id3   id4  id6  id12100
0  1/6/16   11   11  11.0   11      111
1  5/2/17  100  103  12.5   15      100

In [45]: df.set_index('Date').append(new.set_index('Date'))
Out[45]:
          id1  id12100   id2    id3   id4   id6
Date
1/4/16  100.0      NaN  78.0  103.5  15.0   NaN
1/5/16  100.5      NaN  78.0  104.0  16.0   NaN
1/6/16   99.5      NaN  78.5  104.5  16.5   NaN
1/6/16   11.0    111.0   NaN   11.0  11.0  11.0
5/2/17  100.0    100.0   NaN  103.0  12.5  15.0

相关问题 更多 >

    热门问题