我在数据框中有一个字符串列,如下所示:
ID col1
id1 AA's 2015:45,BB:96
id2 Jigga:91,OO:73,BB:34
我想创建一个新的数据框,它可以采用以下形状:
ID var1 var2 var3 var4
id1 45 96 0 0
id2 0 34 91 73
其中var1=AA's 2015,var2=BB,var3=Jigga,var4=OO
我已将字符串第一个值的所有不同值存储在列表中,如下所示:
["AA's 2015","BB","Jigga","OO"]
我想迭代这个列表并为每个值创建一个变量var [i] 这将从col1获取该特定ID的值。
我可以使用for循环遍历列表。但是如何查找值并放入var [i]?
任何想法都将受到赞赏
答案 0 :(得分:1)
使用apply
将字符串操作为pandas系列。传递给apply
的函数将在每个字符串上调用。然后将返回的值Series合并为单个DataFrame。 apply
返回此DataFrame。
DataFrame的列标签来自合并所有系列的索引。合并还将Series值放在适当的列中,从而产生所需的结果:
import pandas as pd
df = pd.DataFrame({'ID': ['id1', 'id2'], 'col1': ["AA: 2015:45,BB:96", 'Jigga:91,OO:73,BB:34']})
result = df['col1'].apply(lambda x: pd.Series(
dict([
item for item in [
part.rsplit(':',1) for part in x.split(',')]
if len(item)>1 # remove items corresponding to empty strings
]))).fillna(0)
result = result.rename(columns={name:'var{}'.format(i) for i, name in
enumerate(result.columns, 1)})
result = pd.concat([df[['ID']], result], axis=1)
print(result)
产量
ID var1 var2 var3 var4
0 id1 45 96 0 0
1 id2 0 34 91 73
我学会了这个技巧here。