python

您所在的位置:网站首页 series1和series2区别 python

python

2024-07-17 02:13| 来源: 网络整理| 查看: 265

使用两个 Pandas 系列:series1 和 series2,我愿意制作 series3。 series1的每个值是一个列表,series2的每个值是series1的对应索引。

>>> print(series1) 0 [481, 12, 11, 220, 24, 24, 645, 153, 15, 13, 6... 1 [64, 80, 79, 147, 14, 20, 56, 288, 12, 208, 26... 4 [5, 6, 152, 31, 295, 127, 711, 5, 271, 291, 11... 5 [363, 121, 727, 249, 483, 122, 241, 494, 555] 7 [112, 20, 41, 9, 104, 131, 26, 298, 65, 214, 1... 9 [129, 797, 19, 151, 448, 47, 19, 106, 299, 144... 11 [72, 35, 25, 200, 122, 5, 75, 30, 208, 24, 14,... 18 [137, 339, 71, 14, 19, 54, 61, 15, 73, 104, 43... >>> print(series2) 0 0 1 3 4 1 5 6 7 4 9 5 11 7 18 2

我的期望:

>>> print(series3) 0 [481, 12, 11, 220, 24, 24, 645, 153, 15, 13, 6... 1 [147, 14, 20, 56, 288, 12, 208, 26... 4 [6, 152, 31, 295, 127, 711, 5, 271, 291, 11... 5 [241, 494, 555] 7 [104, 131, 26, 298, 65, 214, 1... 9 [47, 19, 106, 299, 144... 11 [30, 208, 24, 14,... 18 [71, 14, 19, 54, 61, 15, 73, 104, 43...

我的解决方案 1: 由于 series1 和 series2 的长度相等,我可以制作一个 for 循环来迭代 series1 并计算类似 的内容series1.ix[i][series2.ix[i]] 并创建一个新系列(series3) 来保存结果。

我的解决方案 2: 使用 df = pd_concat([series1, series2]) 生成一个数据帧 df,并创建一个新列(使用 apply 函数进行逐行操作 - 例如,df['series3'] = df.apply( lambda x: subList(x), axis=1).

但是,我认为以上两种解决方案并不是实现我想要的目标的好方法。如果您提出更简洁的解决方案,我将不胜感激!

最佳答案

如果您希望避免创建一个中间pd.DataFrame,而只是想要一个新的pd.Series,您可以使用pd.Series map 对象上的构造函数。所以给出:

In [6]: S1 Out[6]: 0 [481, 12, 11, 220, 24, 24, 645, 153, 15, 13, 6] 1 [64, 80, 79, 147, 14, 20, 56, 288, 12, 208, 26] 2 [5, 6, 152, 31, 295, 127, 711, 5, 271, 291, 11] 3 [363, 121, 727, 249, 483, 122, 241, 494, 555] 4 [112, 20, 41, 9, 104, 131, 26, 298, 65, 214, 1] 5 [129, 797, 19, 151, 448, 47, 19, 106, 299, 144] 6 [72, 35, 25, 200, 122, 5, 75, 30, 208, 24, 14] 7 [137, 339, 71, 14, 19, 54, 61, 15, 73, 104, 43] dtype: object In [7]: S2 Out[7]: 0 0 1 3 2 1 3 6 4 4 5 5 6 7 7 2 dtype: int64

你可以这样做:

In [8]: pd.Series(map(lambda x,y : x[y:], S1, S2), index=S1.index) Out[8]: 0 [481, 12, 11, 220, 24, 24, 645, 153, 15, 13, 6] 1 [147, 14, 20, 56, 288, 12, 208, 26] 2 [6, 152, 31, 295, 127, 711, 5, 271, 291, 11] 3 [241, 494, 555] 4 [104, 131, 26, 298, 65, 214, 1] 5 [47, 19, 106, 299, 144] 6 [30, 208, 24, 14] 7 [71, 14, 19, 54, 61, 15, 73, 104, 43] dtype: object

如果您想在不创建中间容器的情况下修改S1,您可以使用for循环:

In [10]: for i, x in enumerate(map(lambda x,y : x[y:], S1, S2)): ...: S1.iloc[i] = x ...: In [11]: S1 Out[11]: 0 [481, 12, 11, 220, 24, 24, 645, 153, 15, 13, 6] 1 [147, 14, 20, 56, 288, 12, 208, 26] 2 [6, 152, 31, 295, 127, 711, 5, 271, 291, 11] 3 [241, 494, 555] 4 [104, 131, 26, 298, 65, 214, 1] 5 [47, 19, 106, 299, 144] 6 [30, 208, 24, 14] 7 [71, 14, 19, 54, 61, 15, 73, 104, 43] dtype: object

关于python - 如果 pandas series 的值是一个列表,如何获取每个元素的子列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44793306/



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3