Python 如何基于列中的数值创建逗号分隔的数字列表

Python 如何基于列中的数值创建逗号分隔的数字列表,python,pandas,string,Python,Pandas,String,我试图找出如何根据特定列中的数值创建逗号分隔的数字列表。例如,如果数值列的值为5,我想在另一列中创建一个逗号分隔的数字列表,即1、2、3、4、5 假设我们从这个数据帧开始: inventory_partner inventory_partner2 calc 0 A1 aa 1 1 A2 bb 2 2 A3

我试图找出如何根据特定列中的数值创建逗号分隔的数字列表。例如,如果数值列的值为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
我正在尝试访问此数据帧,而不必手动在列表中为每个计算数字可能性编码:

  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
下面是我的代码,它基于每个计算值手动创建一个要应用的数字列表。使用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) 
您可以使用df.apply在从“calc”创建的范围对象上应用str.join:


您可以使用apply函数并在单独的函数中创建响应,这样就可以将其隔离

import pandas as pd


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

def create_comma_list(number):
  res = []
  for n in range(1,number+1):
    res.append(str(n))
   
  return ", ".join(res)

df1["my_comma_list"] = df1.apply(lambda x: create_comma_list(x.calc), axis=1)

print(df1) 
资料来源:

尝试使用应用。加入:


谢谢这很有效。
import pandas as pd


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

def create_comma_list(number):
  res = []
  for n in range(1,number+1):
    res.append(str(n))
   
  return ", ".join(res)

df1["my_comma_list"] = df1.apply(lambda x: create_comma_list(x.calc), axis=1)

print(df1) 
 df['my_comm_list'] = df['calc'].apply(lambda x: ', '.join(np.arange(1,x+1).astype(str)) )