python - 如何使数据框中的每一行的每一列都有一个值?

标签 python pandas numpy dataframe split

我有以下数据框,其中包含列 ID_xID_y,其中包含用单个空格分隔的数据:

df = pd.DataFrame({
    'fruit':['apple','orange','banana'],
    'ID_x' : ['1 2 3','4','5'],  
    'ID_y' : ['A B', 'C D','E']
    }, index=['0','1','2'])

enter image description here

我想要拆分列中的每个值(ID_xID_y)并创建新行,以便每行代表拆分值的一一对应关系.

类似这样的事情:

enter image description here

知道如何解决这个问题吗?

到目前为止我尝试过拆分列中的值:

col_x = 'ID_x'
col_y = 'ID_y'

df = df_unflat.assign(**{col_x:df_unflat[col_x].str.split(' ')})
df = df_unflat.assign(**{col_y:df_unflat[col_y].str.split(' ')})

最佳答案

试试这个方法:

import pandas as pd
df = pd.DataFrame({
    'fruit':['apple','orange','banana'],
    'ID_x' : ['1 2 3','4','5'],  
    'ID_y' : ['A B', 'C D','E']
    }, index=['0','1','2'])
id_x = df['ID_x'].str.split(' ').apply(Series, 1).stack()
id_y = df['ID_y'].str.split(' ').apply(Series, 1).stack()
id_x.index = id_x.index.droplevel(-1)
id_y.index = id_y.index.droplevel(-1)
id_x.name = 'ID_x'
id_y.name = 'ID_y'
del df['ID_x']
del df['ID_y']
df = df.join(id_x)
df = df.join(id_y)
df.reset_index(drop=True)

输出:

    fruit   ID_x    ID_y
0   apple   1       A
1   apple   1       B
2   apple   2       A
3   apple   2       B
4   apple   3       A
5   apple   3       B
6   orange  4       C
7   orange  4       D
8   banana  5       E

关于python - 如何使数据框中的每一行的每一列都有一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44080909/

相关文章:

python - 在 Python 中,我应该如何测试一个变量是 None、True 还是 False

python - 根据另一列中的值将一列中的 NaN 替换为字符串

python - 如何在 Pandas 中读取带有行名的数据框的 CSV 文件

python - pandas 以格式化的方式读取 excel

python - 如何解决 Matplotlib 类型错误 : only integer scalar arrays can be converted to a scalar index

python - scikit-learn joblib 错误 : multiprocessing pool self. 值超出 'i' 格式代码的范围,仅适用于大型 numpy 数组

python - 存储在变量中时找不到正确的文件

python - OrderedDict 性能(与 deque 相比)

python - 在python中读取和保存具有可变列数的数据文件

python - 如何使用 sklearn 提高决策树模型预测的准确性?