Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从给定的JSON记录列表创建/操作数据帧时出现问题_Python_Json_Pandas - Fatal编程技术网

Python 从给定的JSON记录列表创建/操作数据帧时出现问题

Python 从给定的JSON记录列表创建/操作数据帧时出现问题,python,json,pandas,Python,Json,Pandas,我在json_数据文件中有json记录。我使用pd.DataFrame(json\u data)创建了一个新表pd\u json\u data,使用这些记录 我想操作pd_json_data返回一个带有主键(url,hour)的新表,然后更新一个包含布尔值的列 小时数以支票数量为基础。例如,如果第0行的检查数包含378,则新表的小时数应为1到378,如果小时数为正检查数,则更新为True 我该如何处理这个问题 最新答案 伪造数据 df = pd.DataFrame({'number of ch

我在json_数据文件中有json记录。我使用
pd.DataFrame(json\u data)
创建了一个新表
pd\u json\u data
,使用这些记录

我想操作
pd_json_data
返回一个带有主键(url,hour)的新表,然后更新一个包含布尔值的列

小时数以支票数量为基础。例如,如果第0行的检查数包含378,则新表的小时数应为1到378,如果小时数为正检查数,则更新为True

我该如何处理这个问题

最新答案 伪造数据

df = pd.DataFrame({'number of checks': [5, 10, 300, 8], 
                   'positive checks':[[1,3,10], [10,11], [9,200], [1,8,7]], 
                   'url': ['a', 'b', 'c', 'd']})
输出

   number of checks positive checks url
0                 5      [1, 3, 10]   a
1                10        [10, 11]   b
2               300        [9, 200]   c
3                 8       [1, 8, 7]   d
  url                                            hour updated
0   a                                 [1, 2, 3, 4, 5]   False
1   b                 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]    True
2   c  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,...   False
3   d                        [1, 2, 3, 4, 5, 6, 7, 8]    True
迭代并创建新的数据帧,然后连接

dfs = []
for i, row in df.iterrows():
    hour =  np.arange(1, row['number of checks'] + 1)
    df_cur = pd.DataFrame({'hour' : hour,
                          'url': row['url'],
                          'updated': np.in1d(hour, row['positive checks'])})
    dfs.append(df_cur)
df_final = pd.concat(dfs)

    hour updated url
0       1    True   a
1       2   False   a
2       3    True   a
3       4   False   a
4       5   False   a
0       1   False   b
1       2   False   b
2       3   False   b
3       4   False   b
4       5   False   b
5       6   False   b
6       7   False   b
7       8   False   b
8       9   False   b
9      10    True   b
0       1   False   c
1       2   False   c
旧答案 现在构建新的数据框架

df1 = df[['url']].copy()
df1['hour'] = df['number of checks'].map(lambda x: list(range(1, x + 1)))
df1['updated'] = df.apply(lambda x: x['number of checks'] in x['positive checks'], axis=1)
输出

   number of checks positive checks url
0                 5      [1, 3, 10]   a
1                10        [10, 11]   b
2               300        [9, 200]   c
3                 8       [1, 8, 7]   d
  url                                            hour updated
0   a                                 [1, 2, 3, 4, 5]   False
1   b                 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]    True
2   c  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,...   False
3   d                        [1, 2, 3, 4, 5, 6, 7, 8]    True

帮助澄清:您是否希望数据帧单元格中的列表从1到n,其中
n
检查次数
列中的整数?如果
检查数
处于
阳性检查
,则只需一个布尔值?这与我要查找的内容非常接近。我想唯一的改变是,hour中的行不包含数字列表,而是让hour中的每一行包含一个int。因此,在新数据帧的第一行中,hour将是1,更新为True,因为1处于正检查中。在新数据帧的第二行中,小时数为2,更新为False,因为2未处于正检查中。在您的示例中,新表的总行数为5+10+300+8=323行。