我有一个具有以下格式的数据框:-
ID A B C D E F
W1 a1 b1 c1 d1 e1 f1
W2 a2 b2 c2 d2 e2 f2
W3 a3 b3 c3 d3 e3 f3
W4 a4 b4 c4 d4 e4 f4
W5 a5 b5 c5 d5 e5 f5
W6 a6 b6 c6 d6 e6 f6
如果我想获得以下格式。使用熊猫。
ID A B E F
W1 a1 b1 e1 f1
W1 c1 d1 e1 f1
W2 a2 b2 e2 f2
W2 c2 d2 e2 f2
W3 a3 b3 e3 f3
W3 c3 d3 e3 f3
W4 a4 b4 e4 f4
W4 c4 d4 e4 f4
W5 a5 b5 e5 f5
W5 c5 d5 e5 f5
W6 a6 b6 e6 f6
W6 c6 d6 e6 f6
然后将此数据帧分解为多个数据帧,以将第1列作为文件名写入单个csv文件。
W1.csv
W1 a1 b1 e1 f1
W1 c1 d1 e1 f1
W2.csv
W2 a2 b2 e2 f2
W2 c2 d2 e2 f2
W3.csv
W3 a3 b3 e3 f3
W3 c3 d3 e3 f3
W4.csv
W4 a4 b4 e4 f4
W4 c4 d4 e4 f4
W5.csv
W5 a5 b5 e5 f5
W5 c5 d5 e5 f5
W6.csv
W6 a6 b6 e6 f6
W6 c6 d6 e6 f6
答案 0 :(得分:1)
如果确定C->A
和D->B
,则可以重新合并帧,然后重新合并ffill
。通常,d
仅需要将要移动的列与应该放置在其下的列相关联。
d = dict(C='A', D='B')
u = df[[*d]].copy()
f = df.drop([*d], axis=1)
g = pd.concat([f, u.rename(columns=d)], sort=False).sort_index().ffill().groupby('ID')
现在,您可以选择使用g
将每个单独的帧写入文件:
for _, group in g:
print(group, end='\n\n')
ID A B E F
0 W1 a1 b1 e1 f1
0 W1 c1 d1 e1 f1
ID A B E F
1 W2 a2 b2 e2 f2
1 W2 c2 d2 e2 f2
ID A B E F
2 W3 a3 b3 e3 f3
2 W3 c3 d3 e3 f3
ID A B E F
3 W4 a4 b4 e4 f4
3 W4 c4 d4 e4 f4
ID A B E F
4 W5 a5 b5 e5 f5
4 W5 c5 d5 e5 f5
ID A B E F
5 W6 a6 b6 e6 f6
5 W6 c6 d6 e6 f6
答案 1 :(得分:1)
在将数据框分为两部分,填充nan并使用for循环生成文件之后,使用熊猫concat():
df1 = df[['ID', 'A', 'B', 'E', 'F']]
df2 = df[['ID', 'C', 'D']]
df2.columns = ['ID', 'A', 'B']
df = pd.concat([df1, df2], sort = True).sort_values('ID').fillna(method='ffill').reset_index(drop = True)[['ID','A','B','E','F']]
for w in df.ID.unique():
df[df.ID == w].to_csv(w + '.csv')