通过元组乘以系列

问题描述

如何将序列与tuple相乘,并且序列中的每个值都将与tuple中的每个值相乘。

我编写了一个代码示例,向您展示了预期结果的示例:

import numpy as np
import pandas as pd

def main():
    s = pd.Series(data=np.around(a=np.random.uniform(size=10),decimals=3))
    t = (2,3,5,7)
    print(s)

if __name__ == '__main__':
    main()

我的输出

0    0.709
1    0.567
2    0.894
3    0.660
4    0.348
5    0.465
6    0.974
7    0.832
8    0.888
9    0.265
dtype: float64

我需要得到以下结果:

0    (1.418,2.127,3.545,4.963)
1    (1.134,1.701,2.835,3.969)
2    (...,...,...)
3    (...,...)
4    (...,...)
5    (...,...)
6    (...,...)
7    (...,...)
8    (...,...)
9    (...,...)
dtype: float64

解决方法

尝试

import numpy as np
import pandas as pd

def main():
    s = pd.DataFrame(data=np.around(a=np.random.uniform(size=10),decimals=3))
    t = (2,3,5,7)
    s[0] = s[0].apply(lambda x: tuple([(x *  y) for y in t]))
    print(s)

if __name__ == '__main__':
    main()

输出

0           (1.168,1.7519999999999998,2.92,4.088)
1           (1.332,1.9980000000000002,3.33,4.662)
2                       (1.254,1.881,3.135,4.389)
3  (1.372,2.0580000000000003,3.43,4.8020000000...
4          (0.846,1.269,2.1149999999999998,2.961)
5          (0.386,0.579,0.9650000000000001,1.351)
6          (1.528,2.292,3.8200000000000003,5.348)
7                            (0.64,0.96,1.6,2.24)
8                        (1.75,2.625,4.375,6.125)
9                       (1.234,1.851,3.085,4.319)
,

您可以尝试:

>>> s.apply(lambda x: tuple(x*np.array(t)))

为了避免列表理解和循环

,
s = pd.Series(data=np.around(a=np.random.uniform(size=10),decimals=3))
t = (2,7)
s = pd.Series([i for i in zip(*[s*i for i in t])])
s

输出:

0    (1.162,1.7429999999999999,2.905,4.067)
1    (1.746,2.6189999999999998,4.365,6.111)
2                  (0.516,0.774,1.29,1.806)
3                      (1.68,2.52,4.2,5.88)
4                  (1.048,1.572,2.62,3.668)
5                  (0.412,0.618,1.03,1.442)
6                 (1.426,2.139,3.565,4.991)
7    (1.162,4.067)
8    (0.652,0.978,1.6300000000000001,2.282)
9                 (0.446,0.669,1.115,1.561)
dtype: object
,

将元组转换为NumPy数组将使您的工作更加轻松。它只是将整个数组与Series中存在的元素相乘,然后您可以将NumPy数组再次转换为元组。虽然在使用numpy数组处理较大的元组时,多次转换效率不高,但它的优势是优势。如果在处理NumPy数组的系列中不需要存在元组,则是一个好习惯。下面的代码完成了工作。

    import pandas as pd
    import numpy as np
    s = pd.Series(data=np.around(a=np.random.uniform(size=10),decimals=3))
    t = np.array((2,7))
    s=pd.Series([tuple(x*t) for x in s]).
,

您可能想使用pandas DataFrame处理“二维”数据。您可以尝试以下操作:

import pandas as pd
import numpy as np


s = pd.Series(data=np.around(a=np.random.uniform(size=10),7)

df = pd.DataFrame()

for i,value in enumerate(t):
    col = i
    df[col] = s * value

print(df)

此代码显示:

       0      1      2      3
0  1.640  2.460  4.100  5.740
1  1.544  2.316  3.860  5.404
2  1.556  2.334  3.890  5.446
3  0.710  1.065  1.775  2.485
4  1.816  2.724  4.540  6.356
5  0.778  1.167  1.945  2.723
6  0.628  0.942  1.570  2.198
7  0.800  1.200  2.000  2.800
8  0.538  0.807  1.345  1.883
9  1.520  2.280  3.800  5.320