gpt4 book ai didi

python - 添加元组元素,解析为 pandas DataFrame

转载 作者:太空宇宙 更新时间:2023-11-03 12:30:37 25 4
gpt4 key购买 nike

我有几个元组的 Python 列表:

[(0, 61), (1, 30), (5, 198), (4, 61), (0, 30), (5, 200)]
[(1, 72), (2, 19), (3, 31), (4, 192), (6, 72), (5, 75)]
[(3, 12), (0, 51)]
...

这些元组中的每一个都是按照(key, value)格式创建的:

有七个键:0、1、2、3、4、5、6

预期的输出是一个 pandas DataFrame,其中每一列都由键命名:

import pandas as pd
print(df)

0 1 2 3 4 5 6
91 30 0 0 61 198 0
0 72 19 31 192 75 72
51 0 0 12 0 0 0

现在,我在概念上遇到的问题是,如果它们的键相同,如何添加多个元组“值”。

我可以访问给定列表的这些值,例如

mylist = [(0, 61), (1, 30), (5, 198), (4, 61), (0, 30), (5, 200)]
keys = [x[0] for x in mylist]

print(keys)
[0, 1, 5, 4, 0, 5]

我不确定如何创建,例如键值对的字典,我可以将其加载到 pandas DataFrame 中

最佳答案

以名称 tups 考虑您的数据

tups = [
[(0, 61), (1, 30), (5, 198), (4, 61), (0, 30), (5, 200)],
[(1, 72), (2, 19), (3, 31), (4, 192), (6, 72), (5, 75)],
[(3, 12), (0, 51)]
]

选项 0
使用 np.bincount 和疯狂的 map 和 zip 和 splats
这是可行的,因为 np.bincount 的前两个参数是位置数组和添加时要使用的可选权重数组。

pd.DataFrame(
list(map(lambda t: np.bincount(*zip(*t)), tups))
).fillna(0, downcast='infer')

0 1 2 3 4 5 6
0 91 30 0 0 61 398 0
1 0 72 19 31 192 75 72
2 51 0 0 12 0 0 0

选项 1
在轴级别上使用理解和求和。

pd.Series({
(i, j, k): v
for i, row in enumerate(tups)
for k, (j, v) in enumerate(row)
}).sum(level=[0, 1]).unstack(fill_value=0)

0 1 2 3 4 5 6
0 91 30 0 0 61 398 0
1 0 72 19 31 192 75 72
2 51 0 0 12 0 0 0

选项 2
您可以在使用 defaultdict 的结果上使用 DataFrame 构造函数:

from collections import defaultdict

d = defaultdict(lambda: defaultdict(int))

for i, row in enumerate(tups):
for j, v in row:
d[j][i] += v

pd.DataFrame(d).fillna(0, downcast='infer')

0 1 2 3 4 5 6
0 91 30 0 0 61 398 0
1 0 72 19 31 192 75 72
2 51 0 0 12 0 0 0

选项 3
创建一个零数据帧并通过迭代更新它

n, m = len(tups), max(j for row in tups for j, _ in row) + 1

df = pd.DataFrame(0, range(n), range(m))

for i, row in enumerate(tups):
for j, v in row:
df.at[i, j] += v

df

0 1 2 3 4 5 6
0 91 30 0 0 61 398 0
1 0 72 19 31 192 75 72
2 51 0 0 12 0 0 0

关于python - 添加元组元素,解析为 pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49202426/

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