s = df.A.str.split('-', 1)
pd.DataFrame(dict(
id=np.repeat(
s.str[0].values,
s.str[1].str.count(',') + 1
),
A=s.str[1].str.cat(sep=',').split(',')
))
A id
0 7 a
1 5 a
2 1 a
3 6 a
4 63 a
5 101 a
6 39 a
7 1 a
8 2 c
9 7 c
10 10 c
11 12 c
12 27 c
13 40 c
14 71 c
15 78 c
选项2
使用理解
我觉得这更直观。它本质上是一个包含在理解中的产品或双for循环。你知道吗
pd.DataFrame(
[(i, a) for i, b in (
x.split('-', 1) for x in df.A
) for a in b.split(',')],
columns=['id', 'A']
)
id A
0 a 7
1 a 5
2 a 1
3 a 6
4 a 63
5 a 101
6 a 39
7 a 1
8 c 2
9 c 7
10 c 10
11 c 12
12 c 27
13 c 40
14 c 71
15 c 78
df = df['A'].str.split('-', expand=True)
a = df[1].str.split(',')
df = pd.DataFrame({'id': np.repeat(df[0].values, a.str.len()),
'A' : np.concatenate(a)}, columns=['id','A'])
print (df)
id A
0 a 7
1 a 5
2 a 1
3 a 6
4 a 63
5 a 101
6 a 39
7 a 1
8 c 2
9 c 7
10 c 10
11 c 12
12 c 27
13 c 40
14 c 71
15 c 78
选项1
有
np.repeat
和pd.Series.str.count
它的工作方式是,我要重复字符串开头的值,重复次数等于找到的逗号数加1。对于第二列,我用逗号连接字符串,然后用逗号分隔整个字符串。你知道吗
选项2
使用理解
我觉得这更直观。它本质上是一个包含在理解中的产品或双for循环。你知道吗
您可以首先^{} 按} 为} 重塑。最后通过^{} 进行一些数据清理:
-
为2列数据帧,然后^{Series
,按,
拆分并按^{或者,可以使用^{} 和^{} 进行展平:
相关问题 更多 >
编程相关推荐