gpt4 book ai didi

python - 如何基于行的 'attribute' 将数据帧行乘以数组?

转载 作者:行者123 更新时间:2023-12-04 10:27:32 26 4
gpt4 key购买 nike

我有一个 Pandas 数据帧 DF,它几乎占用了我所有的 RAM。
它的索引始终是以下之一:'c1'、'c2'、'c3'。

    0   1   2  ...  n
i
c1 1 8 15
c2 2 9 16
c1 3 10 17
c3 4 11 18
c2 5 12 19
c1 6 13 20
c3 7 14 21
...

我还有一个字典,其中的键与数据帧索引标签“匹配”。这些值是长度为 n(等于数据框列数)的列表/数组。
d = {'c1':[10,10,10,...],'c2':[100,100,100,...],'c3':[1000,1000,1000,...]}

len(d[<allkeys>]) == n >>> True

我想要做的是基于行的“属性”的简单数据帧乘法——在这种情况下,它是它的索引,但它可能是列中的一个值。
结果如下所示:
       0      1      2
i
c1 10 80 150
c2 200 900 1600
c1 30 100 170
c3 4000 11000 18000
c2 500 1200 1900
c1 60 130 200
c3 7000 14000 21000

我不想以我只能做 DF*DF2 的方式构建第二个数据帧 DF2,因为我没有足够的 RAM 并且因为这样的数据帧对我来说似乎毫无意义,这意味着它只是数组的重复/lists(如果我错了,请纠正我)。

我想过有一个这样的第二个数据框:
       0     1     2
c1 10 10 10
c2 100 100 100
c3 1000 1000 1000

但是当我做 DF * DF2 时,索引以某种方式被排序,我不知道如何避免这种情况。
结果:
          0         1         2
c1 100 800 1500
c1 300 1000 1700
c1 600 1300 2000
c2 20000 90000 160000
c2 50000 120000 190000
c3 4000000 11000000 18000000
c3 7000000 14000000 21000000

如果您认为有另一种方法可以解决这个问题(不同的数据结构、库等),那也将不胜感激。

示例代码:
df = pd.DataFrame({0: [1, 2, 3, 4, 5, 6, 7],1: [8, 9, 10, 11, 12, 13, 14], 2: [15, 16, 17, 18, 19, 20, 21]}, index=pd.Index(['c1', 'c2', 'c1', 'c3', 'c2', 'c1', 'c3'], dtype='object', name='i'))
d = {'c1':[10,10,10],'c2':[100,100,100],'c3':[1000,1000,1000]}
df2 = pd.DataFrame.from_dict(d,orient='index')

最佳答案

想法是由 DataFrame.set_index 重复数据删除索引, 乘以 DataFrame.mul 按第一级和最后通过 DataFrame.reset_index 删除第二级:

df1 = (df.set_index(np.arange(len(df)), append=True)
.mul(df2, level=0)
.reset_index(level=1, drop=True))
print (df1)
0 1 2
i
c1 10 80 150
c2 200 900 1600
c1 30 100 170
c3 4000 11000 18000
c2 500 1200 1900
c1 60 130 200
c3 7000 14000 21000

关于python - 如何基于行的 'attribute' 将数据帧行乘以数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60566053/

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