小编Dav*_*man的帖子

从具有多个字符串的列生成get_dummies类型数据框的最快方法

我有一个列'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)

python split dataframe pandas

11
推荐指数
1
解决办法
2965
查看次数

如何从数据框中的两列创建列表字典

我有一个这样的数据框

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)

似乎仍然必须有一个更快的方法

谢谢你的帮助!

python dictionary list

2
推荐指数
2
解决办法
6444
查看次数

标签 统计

python ×2

dataframe ×1

dictionary ×1

list ×1

pandas ×1

split ×1