Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.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 将数据帧中字典的值转换为列。还可以使用其他值添加额外的列_Python_Pandas_Numpy - Fatal编程技术网

Python 将数据帧中字典的值转换为列。还可以使用其他值添加额外的列

Python 将数据帧中字典的值转换为列。还可以使用其他值添加额外的列,python,pandas,numpy,Python,Pandas,Numpy,我有一个数据框,最初看起来像这样 date some_info 2020-01-01 [{'a': 1, 'hour': -1, 'data': 2}, {'a': 2, 'ho... 2020-01-02 [{'a': 1, 'hour': -1, 'data': 2}, {'a': 2, 'ho... 2020-01-03 [{'a': 1, 'hour': -1, 'data': 2}, {'a': 2, 'ho... ...... 其中一些信息是一个类似于字典的列表

我有一个数据框,最初看起来像这样

date        some_info
2020-01-01  [{'a': 1, 'hour': -1, 'data': 2}, {'a': 2, 'ho...
2020-01-02  [{'a': 1, 'hour': -1, 'data': 2}, {'a': 2, 'ho...
2020-01-03  [{'a': 1, 'hour': -1, 'data': 2}, {'a': 2, 'ho...
......
其中一些信息是一个类似于字典的列表

[{"a" : 1, "hour" : -1, "data":2},{"a" : 2, "hour" : 1, "data":2},{"a" : 3, "hour" : 4, "data":2},{"a" : 4, "hour" : 6, "data":2}]
如何将小时作为数据帧的列,并添加诸如-1_a+数据、1_a+数据、1_a-数据、1_a*数据等列。。。每小时。一排

Date      -1_a  1_a  4_a  6_a   6_a+data    

2020-01-01 1     2   3    4        6
2020-01-02 1     2   3    4        6
2020-01-03 1     2   3    4        6
我能够使用2 for循环来实现这一点,并为大数据消耗更多的时间

有没有更好的办法

[编辑]

-1_a+数据的计算是针对小时的日期(行)
-1
添加
a
数据
,因此这里是
(a)1+(数据)2=(-1_a+数据)3
示例数据:

date,some_info
2020-01-01,"[{""a"" : 1, ""hour"" : -1, ""data"":2},{""a"" : 2, ""hour"" : 1, ""data"":2},{""a"" : 3, ""hour"" : 4, ""data"":2},{""a"" : 4, ""hour"" : 6, ""data"":2}]"
2020-01-02,"[{""a"" : 1, ""hour"" : -1, ""data"":4},{""a"" : 2, ""hour"" : 1, ""data"":9},{""a"" : 3, ""hour"" : 4, ""data"":2},{""a"" : 4, ""hour"" : 6, ""data"":23}]"
2020-01-03,"[{""a"" : 1, ""hour"" : -1, ""data"":4},{""a"" : 2, ""hour"" : 1, ""data"":15},{""a"" : 3, ""hour"" : 4, ""data"":22},{""a"" : 4, ""hour"" : 6, ""data"":223}]"
some_info
分解为行,根据数据计算值和键,然后旋转:

a['some_info'] = a['some_info'].apply(json.loads)

a = a.explode('some_info')

a['key'] = a['some_info'].apply(lambda x: str(x['hour']) + 'a+data')
a['value'] = a['some_info'].apply(lambda x: x['a'] + x['data'])

a = a.loc[:, ['date', 'key', 'value']]
a = a.pivot_table(values='value', index=['date'], columns='key', aggfunc='first').reset_index()
结果:

date,-1a+data,1a+data,4a+data,6a+data
2020-01-01,3,4,5,6
2020-01-02,5,11,5,27
2020-01-03,5,17,25,227

您如何计算值,如
-1_a+数据
?“1_a+数据”表示给定日期(行)在“1”小时添加“a”值,在“1”小时添加“data”值如果需要帮助,用示例计算编辑您已经提供的词典列表中的问题,作为示例将极大地帮助其他人回答该问题,并帮助您如何在同一数据帧中执行其他操作<代码>-1_a-数据
-1_a*数据
。。。另外,在我的回答中,我只需创建多个
-1\u a
数据框,更改计算并在列
处设置键作为示例,然后将它们全部合并回一个大数据框,进行小的编辑,还有需要不同时隙数据的操作
-1\u a\u diff\u 1
是不同的小时“1”和“-1”处的“a”值对于差异,不要分解它们,而是这样做:
a['value']=a['some_info']。应用(lambda x:{j['hour']:j['a']表示j in x})。应用(lambda x:x[-1]-x[1])