Python 从给定的JSON记录列表创建/操作数据帧时出现问题
我在json_数据文件中有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
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行。