我有一个列'col2',它有一个字符串列表.我当前的代码太慢了,大约有2000个独特的字符串(下面例子中的字母)和4000行.结束为2000列和4000行.
In [268]: df.head()
Out[268]:
col1 col2
0 6 A,B
1 15 C,G,A
2 25 B
Run Code Online (Sandbox Code Playgroud)
有没有一种快速的方法来制作这种傻瓜格式?每个字符串都有自己的列,并且在每个字符串的列中,如果该行在col2中具有该字符串,则为0或1.
In [268]: def get_list(df):
d = []
for row in df.col2:
row_list = row.split(',')
for string in row_list:
if string not in d:
d.append(string)
return d
df_list = get_list(df)
def make_cols(df, lst):
for string in lst:
df[string] = 0
return df
df = make_cols(df, df_list)
for idx in range(0, len(df['col2'])):
row_list = df['col2'].iloc[idx].split(',')
for string in row_list:
df[string].iloc[idx]+= 1
Out[113]:
col1 col2 A …Run Code Online (Sandbox Code Playgroud) 我有一个这样的数据框
df = pd.DataFrame(columns = ['A', 'B'])
df.A = [1,1,1,2,2,2,2,4,4,5]
df.B = [5,2,4,3,1,5,4,1,2,2]
Run Code Online (Sandbox Code Playgroud)
我目前正在使用什么
d = {}
for i in df.A:
d[i] = []
for v in df.A[df.A == i].index:
d[i].append(df.B[v])
Run Code Online (Sandbox Code Playgroud)
导致
{1: [5, 2, 4], 2: [3, 1, 5, 4], 4: [1, 2], 5: [2]}
Run Code Online (Sandbox Code Playgroud)
但这很慢。
这样做的pythonic方法是什么?
编辑:
d = {}
for i in df.A.unique():
d[i] = df[df.A == i].B.tolist()
Run Code Online (Sandbox Code Playgroud)
似乎仍然必须有一个更快的方法
谢谢你的帮助!