当前位置: 首页 > 面试题库 >

迭代熊猫数据框,检查值并创建其中的一些

滑景胜
2023-03-14
问题内容

好的,我有一个(大)数据框,如下所示:

         date       time      value
0     20100201         0         1
1     20100201         6         2
2     20100201        12         3
3     20100201        18         4
4     20100202         0         5
5     20100202         6         6
6     20100202        12         7
7     20100202        18         8
8     20100203         0         9
9     20100203        18        11
10    20100204         6        12
...
8845  20160101        18      8846

如您所见,数据框具有一列date,一列time,每天有四个小时(00、06、12、18)和一列value

问题在于数据框中缺少日期,在上面的示例中,第8行和第9行之间应该有两个额外的行,分别对应于小时612当天20100203,并且在第9行和第10行之间应该有一个额外的行,对应于小时和日期。0一天中的一个小时20100204

我需要什么?
我想date对数据框的列进行迭代,检查每天是否存在并且没有人丢失,并且每天是否有四个小时(00、06、12、18)。如果缺少某些迭代过程中,应该在加入
正好 那个地方,与丢失datetimeNaN作为一种价值。为了不再复制所有数据框,让我输入最终版本中应该出现的相关方面:

...
7     20100202        18         8
8     20100203         0         9
9     20100203         6       NaN
10    20100203        12       NaN   
11    20100203        18        11
12    20100204         0       NaN
13    20100204         6        12
...

如果您有兴趣,请在此处提出此问题的更简单版本,以python中的模块化算法来迭代熊猫数据框,并由用户@Alexander和@piRSquared友好地回答。这里要求的版本比较困难,涉及(我想)使用datetime和timedelta并迭代更多列。

抱歉,很长的帖子,非常感谢。


问题答案:

您可以使用pivot重塑-NaN按列输入缺失值time,然后unstackreset_indexsort_values

import pandas as pd

df = pd.DataFrame({'date': {0: 20100201, 1: 20100201, 2: 20100201, 3: 20100201, 4: 20100202, 5: 20100202, 6: 20100202, 7: 20100202, 8: 20100203, 9: 20100203, 10: 20100204}, 
                   'time': {0: 0, 1: 6, 2: 12, 3: 18, 4: 0, 5: 6, 6: 12, 7: 18, 8: 0, 9: 18, 10: 6},
                   'value': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 11, 10: 12}})

print (df)
        date  time  value
0   20100201     0      1
1   20100201     6      2
2   20100201    12      3
3   20100201    18      4
4   20100202     0      5
5   20100202     6      6
6   20100202    12      7
7   20100202    18      8
8   20100203     0      9
9   20100203    18     11
10  20100204     6     12



print (df.pivot(index='date', columns='time', values='value')
         .unstack()
         .reset_index(name='value')
         .sort_values('date'))

    time      date  value
0      0  20100201    1.0
4      6  20100201    2.0
8     12  20100201    3.0
12    18  20100201    4.0
1      0  20100202    5.0
5      6  20100202    6.0
9     12  20100202    7.0
13    18  20100202    8.0
2      0  20100203    9.0
6      6  20100203    NaN
10    12  20100203    NaN
14    18  20100203   11.0
3      0  20100204    NaN
7      6  20100204   12.0
11    12  20100204    NaN
15    18  20100204    NaN

reset_index如果您需要index这样的服务,也许您可以再次:

print (df.pivot(index='date', columns='time', values='value')
         .unstack()
         .reset_index(name='value')
         .sort_values('date')
         .reset_index(drop=True))

    time      date  value
0      0  20100201    1.0
1      6  20100201    2.0
2     12  20100201    3.0
3     18  20100201    4.0
4      0  20100202    5.0
5      6  20100202    6.0
6     12  20100202    7.0
7     18  20100202    8.0
8      0  20100203    9.0
9      6  20100203    NaN
10    12  20100203    NaN
11    18  20100203   11.0
12     0  20100204    NaN
13     6  20100204   12.0
14    12  20100204    NaN
15    18  20100204    NaN


 类似资料:
  • 问题内容: 我有一个只有几列的熊猫数据框。 现在我知道某些行是基于某个列值的离群值。 例如 “ Vol”列的所有值都在周围,12xx而一个值是4000(离群值)。 现在,我想排除具有Vol此类列的行。 因此,从本质上讲,我需要在数据帧上放置一个过滤器,以便我们选择某一列的值在均值例如3个标准差以内的所有行。 有什么优雅的方法可以做到这一点? 问题答案: 如果你的数据框中有多个列,并且希望删除至少一

  • 问题内容: 这个问题已经在这里有了答案 : 如何联接两个列范围在一定范围内的数据框? (5个答案) 2年前关闭。 我需要在一个标识符和一个数据帧中的日期位于另一个数据帧中的两个日期之间的条件下合并两个熊猫数据帧。 数据框A具有日期(“ fdate”)和ID(“ cusip”): 我需要将此与此数据框B合并: 在和之间和。 在SQL中,这是微不足道的,但是我看到的如何在pandas中做到这一点的唯一

  • 问题内容: 这是我的df的简化示例: 我想按行对列中的数据求和: 现在,我的问题来了!我想创建4个新列,并从每一行的总和中计算百分比值。因此,第一个新列中的第一个值应该是(0.095389 / 4.258550),第二个新列中的第一个值(0.556978 / 4.258550)…依此类推…请帮助 问题答案: 您可以像这样手动轻松地为每个列执行此操作: 如果您要一步一步对所有列进行此操作,则可以使用

  • 问题内容: 看起来很丑: 不起作用: 是否存在上述“问题”的优雅且可行的解决方案? 问题答案: 使用isin

  • 问题内容: 我终于从包含许多json对象的文件中获得了我需要的数据输出,但是当它在数据中循环时,我需要一些帮助将以下输出转换为单个数据帧。这是产生输出的代码,包括输出外观的示例: 原始数据: 运行上面的命令时,我将获得示例输出,我希望将其存储为3列的pandas数据框中。 因此,以下代码似乎更接近,因为如果我在列表中传递并转置df,它会给我一个时髦的df。关于如何正确调整此形状的任何想法吗? 数据

  • 问题内容: 好的,我有一个大数据框,例如: 我们不要在这里迷路。该列hour代表一天中的小时,从6到6个小时。Columnvalues很好,确切地说,这里的值仅作为示例,而不是实际的值。 如果您仔细查看该hour列,您会发现缺少几个小时。例如,第7行和第8行之间有一个间隔(缺少小时0的值)。还有更大的差距,例如在第10行和第11行之间(第00和06小时)。 我需要什么?我想检查何时缺少一个小时(当