我有以下数据框:

0  Symbol   DataDiscriminator   Open
1  AKAM     Summary             -
2  AKAM     Lot                 2017-05-12, 16:20:00
3   APA     Summary             -
4   APA     Lot                 2017-03-31, 16:20:00
5   APA     Lot                 2017-03-24, 16:20:00


我想用下一行的日期设置DataDiscriminator =“ Summary”的Open元素的值,然后删除DataDiscriminator =“ Lot”行以获得:

0  Symbol   DataDiscriminator   Open
1  AKAM     Summary             2017-05-12
3   APA     Summary             2017-03-31
...


当前的工作逻辑是:

for i, row in s.iterrows():
    if s.DataDiscriminator[i] == "Summary":
        o = s.Open[i+1]                          # Get the next row's Open data
        s = s.set_value(i, "Open", o[0:10])      # Slice out the time in the new Open data
s = s[s.DataDiscriminator == "Summary"]          # Keep only the Summary rows in the dataset


有没有更好的矢量化方法来实现这一目标?

最佳答案

Shift是执行此操作的标准矢量化方法:

>>> df.loc[ df.DataDiscriminator=='Summary','Open'] = df.Open.shift(-1)
>>> df = df[ df.DataDiscriminator=='Summary' ]

  Symbol DataDiscriminator                  Open
0   AKAM           Summary  2017-05-12, 16:20:00
2    APA           Summary  2017-03-31, 16:20:00

关于python - 用下一行替换数据框元素数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44737540/

10-12 17:05
查看更多