如何根据列中的数值创建逗号分隔的数字列表

Jus*_* CR 0 python string pandas

我想弄清楚如何根据特定列中的数值创建逗号分隔的数字列表。例如,如果数字列的值为 5,我想在另一列中创建一个逗号分隔的数字列表作为“1、2、3、4、5”。

假设我们从这个数据帧开始:

  inventory_partner inventory_partner2  calc
0                A1                 aa     1
1                A2                 bb     2
2                A3                 cc     5
3                A4                 dd     4
4                A5                 ee     5
5                A6                 ff     3
Run Code Online (Sandbox Code Playgroud)

我正在尝试访问此数据框,而不必为每个计算数字可能性在列表中手动编码:

  inventory_partner inventory_partner2  calc  my_comma_list
0                A1                 aa     1              1
1                A2                 bb     2           1, 2
2                A3                 cc     5  1, 2, 3, 4, 5
3                A4                 dd     4     1, 2, 3, 4
4                A5                 ee     5  1, 2, 3, 4, 5
5                A6                 ff     3        1, 2, 3
Run Code Online (Sandbox Code Playgroud)

下面是我的代码,它根据每个计算值手动创建要应用的数字列表。有没有更简单的方法使用 for 循环来做到这一点?我在下面的代码中尝试过,但无法获取要在 for 循环中使用的 calc 值。

#create dataframe
d = {'inventory_partner': ['A1', 'A2', 'A3', 'A4', 'A5', 'A6'], 'inventory_partner2': ['aa', 'bb', 'cc', 'dd', 'ee', 'ff'], 'calc': [1, 2, 5, 4, 5, 3]}
df1 = pd.DataFrame(data=d)

print(df1) #print original dataframe

#create my_comma_list column based on number values in calc column - too much code 
df1.insert(3, 'my_comma_list', '')
df1.loc[df1['calc'] == 1, 'my_comma_list'] = '1'
df1.loc[df1['calc'] == 2, 'my_comma_list'] = '1, 2'
df1.loc[df1['calc'] == 3, 'my_comma_list'] = '1, 2, 3'
df1.loc[df1['calc'] == 4, 'my_comma_list'] = '1, 2, 3, 4'
df1.loc[df1['calc'] == 5, 'my_comma_list'] = '1, 2, 3, 4, 5'

#df1['inventory_partner'] = ",".join([str(i) for i in range(0, df1['calc'].values)]) #I tried something like this but it can't fetch the calc value and use it in the for loop

print(df1) 
Run Code Online (Sandbox Code Playgroud)

Cyt*_*rak 7

您可以使用df.apply适用str.joinrange从创建的对象'calc'

>>> df['my_comma_list'] = df.calc.apply(lambda x: ', '.join(map(str, range(1, x+1))))

  inventory_partner inventory_partner2  calc  my_comma_list
0                A1                 aa     1              1
1                A2                 bb     2           1, 2
2                A3                 cc     5  1, 2, 3, 4, 5
3                A4                 dd     4     1, 2, 3, 4
4                A5                 ee     5  1, 2, 3, 4, 5
5                A6                 ff     3        1, 2, 3
Run Code Online (Sandbox Code Playgroud)