【问题标题】:Fill Dataframe column with list that repeats for each item in another list用列表填充数据框列,该列表为另一个列表中的每个项目重复
【发布时间】:2018-06-27 20:19:02
【问题描述】:

我有两个要用于计算的数字列表,但它们的长度不同。

list_1 = [123, 456, 789, 987]

list_2 = [321, 654]

由于总共有 4x2 = 8 个组合,我想让它们像这样输出:

       Calc_1                    Calc_2
Calc_of_list_1_num_1      Calc_of_list_2_num_1
Calc_of_list_1_num_2      Calc_of_list_2_num_1
Calc_of_list_1_num_3      Calc_of_list_2_num_1
Calc_of_list_1_num_4      Calc_of_list_2_num_1
Calc_of_list_1_num_1      Calc_of_list_2_num_2
Calc_of_list_1_num_2      Calc_of_list_2_num_2
Calc_of_list_1_num_3      Calc_of_list_2_num_2
Calc_of_list_1_num_4      Calc_of_list_2_num_2

我一直在为此苦苦挣扎,只是不知道如何处理它。

【问题讨论】:

  • 即使list_2list_2 = [321, 654, 212]Calc_2 是否应该保持升序/排序?
  • 是的,应该是升序的。

标签: python python-3.x pandas dataframe


【解决方案1】:

使用numpy的np.ufunc.outer:

示例添加:

np.add.outer(list_1,list_2)

输出:

array([[ 444,  777],
       [ 777, 1110],
       [1110, 1443],
       [1308, 1641]])

创建数据框:

pd.DataFrame(np.add.outer(list_1,list_2), columns=list_2, index=list_1)

输出:

      321   654
123   444   777
456   777  1110
789  1110  1443
987  1308  1641

对于乘法使用 np.outer:

np.outer(list_1,list_2)

输出:

array([[ 39483,  80442],
       [146376, 298224],
       [253269, 516006],
       [316827, 645498]])

对于数据框:

pd.DataFrame(np.outer(list_1,list_2), columns=list_2, index=list_1)

输出:

        321     654
123   39483   80442
456  146376  298224
789  253269  516006
987  316827  645498

【讨论】:

  • 您如何建议实施一种仅在满足其他条件时才进行乘法的方法?具体来说,如果两个数字都在 100-199、200-299 等范围内?
  • 对不起,我不明白。之后您可以进行头部计算并过滤您的数据框吗?
  • 对不起,我很难说清楚。所以我有列表: list_1 = [123, 456, 789, 987] list_2 = [321, 654] 如果它们不在同一范围内(即 100-199),我想运行一个计算 list_1 * 100 如果它们在同一范围内,我想做:list_1 * 100 + 5
猜你喜欢
  • 1970-01-01
  • 2010-12-24
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
  • 2014-12-13
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多