gpt4 book ai didi

python - 如何将列表转换为数据框矩阵

转载 作者:行者123 更新时间:2023-12-01 02:54:48 25 4
gpt4 key购买 nike

我有一个包含两列的列表,我想用作矩阵的行和列索引,其中一列是数据。我如何像处理 csv 文件一样构造一个矩阵?

enter image description here

这是我的 list 。我希望将 count 作为数据,eclipse_id 作为索引,最后一个作为列索引:

In[31]: listado

Out[31]:[{'count': 1L, 'eclipse_id': 10616, 'subscriber_id': 13},
{'count': 1L, 'eclipse_id': 10337, 'subscriber_id': 13},
{'count': 1L, 'eclipse_id': 9562, 'subscriber_id': 13},
{'count': 1L, 'eclipse_id': 10660, 'subscriber_id': 13},
{'count': 1L, 'eclipse_id': 10621, 'subscriber_id': 13},

我的尝试:

pd.DataFrame(data=listado[1:,0],
index=listado[2:,0]
columns=listado[3:,0])

With the error message :

File "<ipython-input-33-f87ac772eb69>", line 3
columns=listado[3:,0])
^
SyntaxError: invalid syntax

输出应该是这样的:

subscriber_id  13   14    15     16
eclipse_id
9562 1 1 0 ...
10337 1 0 0 ...
10616 1 2 0 ...
10621 1 1 1
10660 1 0 0

最佳答案

看来你需要 pivot :

listado = [
{'count': 1, 'eclipse_id': 10616, 'subscriber_id': 13},
{'count': 1, 'eclipse_id': 10337, 'subscriber_id': 13},
{'count': 1, 'eclipse_id': 9562, 'subscriber_id': 13},
{'count': 1, 'eclipse_id': 10660, 'subscriber_id': 13},
{'count': 1, 'eclipse_id': 10621, 'subscriber_id': 13}]

df = pd.DataFrame(listado)
print (df)
count eclipse_id subscriber_id
0 1 10616 13
1 1 10337 13
2 1 9562 13
3 1 10660 13
4 1 10621 13

df = df.pivot(index='eclipse_id', columns='subscriber_id', values='count')
print (df)
subscriber_id 13
eclipse_id
9562 1
10337 1
10616 1
10621 1
10660 1

或者:

df = df.set_index(['eclipse_id','subscriber_id'])['count'].unstack(fill_value=0)
print (df)
subscriber_id 13
eclipse_id
9562 1
10337 1
10616 1
10621 1
10660 1
<小时/>

如果重复项需要按平均值总和聚合数据...:

listado = [
{'count': 5, 'eclipse_id': 9562, 'subscriber_id': 13},
{'count': 4, 'eclipse_id': 9562, 'subscriber_id': 13},
{'count': 1, 'eclipse_id': 9562, 'subscriber_id': 13},
{'count': 1, 'eclipse_id': 10660, 'subscriber_id': 13},
{'count': 1, 'eclipse_id': 10621, 'subscriber_id': 13}]

df = pd.DataFrame(listado)
print (df)
count eclipse_id subscriber_id
0 5 9562 13 < same 9562, 13, different 5
1 4 9562 13 < same 9562, 13, different 4
2 1 9562 13 < same 9562, 13, different 1
3 1 10660 13
4 1 10621 13

df = df.groupby(['eclipse_id','subscriber_id'])['count'].mean().unstack(fill_value=0)
print (df)
subscriber_id 13
eclipse_id
9562 3.333333 <- (5+4+1)/3 = 3.333
10621 1.000000
10660 1.000000

或者pivot_table :

df = df.pivot_table(index='eclipse_id', 
columns='subscriber_id',
values='count',
aggfunc='mean')
print (df)
subscriber_id 13
eclipse_id
9562 3.333333 <- (5+4+1)/3 = 3.333
10621 1.000000
10660 1.000000

关于python - 如何将列表转换为数据框矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44327292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com