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)
您可以使用df.apply适用str.join于range从创建的对象'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)
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |