我有一个像:
products price
abc|abc|abc|abc|abc 1|2|10|20|30
abc|abc|deg| 3|8|5
abc|abc|abc|abc|abc|abc 10|11|12|13|14|15|16|17|18
解释:每一行都是顾客购买的篮子。 例如,所有产品都以'|'分隔 第一个客户(行)花了63美元买了5个产品。 通常,行包含相同数量的“|”。
但正如您所看到的,在最后一排,有6种产品和9种价格。 问题来自256 char的限制,所以有些产品不保存在文件中,但是我们购买的产品都有价格(当然如果柱价不超过256 CHAR!)
我想把价格带到'|'的最大值在列产品上获得如下的df:
products price
abc|abc|abc|abc|abc 1|2|10|20|30
abc|abc|deg| 3|8|5
abc|abc|abc|abc|abc|abc 10|11|12|13|14|15
我试试这个:
def count_fx(s):
return s.count('|')
max_prod = max(df['products'].apply(count_fx))
df.ix[np.logical_and(df.products.str.len()==255), ['products']]= df['products'].str.rpartition('|',max_prod)[0]
但它不起作用。
你知道任何解决方案吗?
由于
答案 0 :(得分:0)
使用str.split('|', expand=True)
在价格上创建一个掩码然后重新组合:
have_products = df.products.str.split('|', expand=True).notnull()
get_price = df.price.str.split('|', expand=True)[have_p]
df.price = get_price.apply(lambda x: '|'.join(x.dropna().astype(str)), axis=1)
print df
products price
0 abc|abc|abc|abc|abc 1|2|10|20|30
1 abc|abc|deg| 3|8|5
2 abc|abc|abc|abc|abc|abc 10|11|12|13|14|15