【问题标题】:How to split a dataframe line into a multiple dataframes?如何将数据框行拆分为多个数据框?
【发布时间】:2023-04-09 15:34:01
【问题描述】:

我有一个数据框:

    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 时忽略它们。

【问题讨论】:

    标签: python python-3.x pandas dataframe numpy


    【解决方案1】:

    您可以在列表中指定列名,然后在列表推导中对其进行过滤并将列转换为默认的rangeDataFrame.set_axis 列名,concat 连接,DataFrame.sort_index 排序,替换缺失值并创建默认值索引:

    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      
    

    【讨论】:

    • 而不是vals,如果有标题的名称那么
    • @AtomStore - 你能解释更多吗?
    • 在标题中而不是 0,1,2,3,4,5,6 如果有标题名称并且我想按标题名称排列它,我可以使用 df.loc 代替 df .iloc 在第 2 行?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多