我有数据框,我想将列表提取到另一列。
df = pd.DataFrame({"Q007_A00":["Y","Y","Y","Y","Y"],
"Q007_B00": ["N","N","N","N","N"],
"Q007_C01": [1,4,5,2,"8,3"],
"Q007_C02": ["Text 1","Text 2","Text 3,Text 4,Text 5","Text 4","Text 5,Text 6"]})
Q007_A00 Q007_B00 Q007_C01 Q007_C02
0 Y N 1 Text 1
1 Y N 4 Text 2
2 Y N 5 Text 3,Text 4,Text 5
3 Y N 2 Text 4
4 Y N 8,3 Text 5,Text 6
输出
Q007_A00 Q007_B00 Q007_C01 Q007_C01_1 Q007_C02 Q007_C02_1 Q007_C02_2
Y N 1 0 Text 1 0 0
Y N 4 0 Text 2 0 0
Y N 5 0 Text 3 Text 4 Text 5
Y N 2 0 Text 4 0 0
Y N 8 3 Text 5 Text 6 0
列名称将加1
答案 0 :(得分:2)
您可以将concat
与list comprehension
和split
:
df = pd.concat([df[x].astype(str).str.split(',', expand=True) for x in df],
axis=1,
keys=df.columns).fillna(0)
列中的 MultiIndex
可以通过list comprehension
删除:
df.columns = ['{}_{}'.format(col[0], col[1]) for col in df.columns]
print (df)
Q007_A00_0 Q007_B00_0 Q007_C01_0 Q007_C01_1 Q007_C02_0 Q007_C02_1 Q007_C02_2
0 Y N 1 0 Text 1 0 0
1 Y N 4 0 Text 2 0 0
2 Y N 5 0 Text 3 Text 4 Text 5
3 Y N 2 0 Text 4 0 0
4 Y N 8 3 Text 5 Text 6 0
但是如果需要从列名中删除_0
:
df.columns = ['{}{}'.format(col[0], '' if col[1] == 0 else '_' + str(col[1]))
for col in df.columns]
print (df)
Q007_A00 Q007_B00 Q007_C01 Q007_C01_1 Q007_C02 Q007_C02_1 Q007_C02_2
0 Y N 1 0 Text 1 0 0
1 Y N 4 0 Text 2 0 0
2 Y N 5 0 Text 3 Text 4 Text 5
3 Y N 2 0 Text 4 0 0
4 Y N 8 3 Text 5 Text 6 0