我有一个数据框:
0 1 2 3 4 5 6
0 A B C D E F G
1 H I J K L M N
2 O P Q R S T U
3 V W X Y Z
我想在随机条件下将每一行分成多行(可以是任何条件):
例如
df['2'],df['4],df['6]
df['0'],df['3']
df['1'],df['5']
在这种情况下,应为输入数据框中的每一行重复这三行。
预期输出:
C E G
A D
B F
J L N
H K
I M
Q S U
O R
P T
X Z
V Y
W
#should repeat for other rows too
标题不是必需的,或者我可以在转换为 csv 时忽略它们。
答案 0 :(得分:1)
您可以在列表中指定列名,然后在列表理解中对其进行过滤并将列转换为默认的range
列名,按DataFrame.set_axis
,按concat
连接,按{{3}排序},替换缺失值并创建默认索引:
vals = [['2','4','6'], ['0','3'], ['1','5']]
L = [df.loc[:, x].set_axis(range(len(x)), axis=1) for x in vals]
df = pd.concat(L).sort_index(kind='mergesort').fillna('').reset_index(drop=True)
print (df)
0 1 2
0 C E G
1 A D
2 B F
3 J L N
4 H K
5 I M
6 Q S U
7 O R
8 P T
9 X Z
10 V Y
11 W