我的任务完全让我发疯。让我们假设我们有这个df:
import pandas as pd
k = {'random_col':{0:'a',1:'b',2:'c'},'isin':{0:'ES0140074008', 1:'ES0140074008ES0140074010', 2:'ES0140074008ES0140074016ES0140074024'},'n_isins':{0:1,1:2,2:3}}
k = pd.DataFrame(k)
我想做的是通过col n_isins对行进行多次或三次加倍,这是通过将col isin的lentgh除以12获得的数字,因为isins总是12个字符的字符串。
所以,我需要1次0行,2次1行和3次行2.我的实数上限为6,因此这是一项艰巨的任务。我开始使用布尔并切割col isin,但这并没有让我一无所获。希望我的解释足够好。另外我需要像这样[0:11] +' ' + [12:23] ...由E'分裂但我想我知道怎么做,我只是发布它因为是规则我必须复制每一行的次数的标准。提前谢谢!
答案 0 :(得分:1)
我认为您需要numpy.repeat
loc
,最后删除reset_index
索引中的重复项。最后一个新列使用自定义拆分功能numpy.concatenate
:
n = np.repeat(k.index, k['n_isins'])
k = k.loc[n].reset_index(drop=True)
print (k)
isin n_isins random_col
0 ES0140074008 1 a
1 ES0140074008ES0140074010 2 b
2 ES0140074008ES0140074010 2 b
3 ES0140074008ES0140074016ES0140074024 3 c
4 ES0140074008ES0140074016ES0140074024 3 c
5 ES0140074008ES0140074016ES0140074024 3 c
#https://stackoverflow.com/a/7111143/2901002
def chunks(s, n):
"""Produce `n`-character chunks from `s`."""
for start in range(0, len(s), n):
yield s[start:start+n]
s = np.concatenate(k['isin'].apply(lambda x: list(chunks(x, 12))))
df['new'] = pd.Series(s, index = df.index)
print (df)
isin n_isins random_col new
0 ES0140074008 1 a ES0140074008
1 ES0140074008ES0140074010 2 b ES0140074008
2 ES0140074008ES0140074010 2 b ES0140074010
3 ES0140074008ES0140074016ES0140074024 3 c ES0140074008
4 ES0140074008ES0140074016ES0140074024 3 c ES0140074016
5 ES0140074008ES0140074016ES0140074024 3 c ES0140074024