首页 > 解决方案 > 重建熊猫数据框

问题描述

我对 Python 很陌生。我在重建坏数据框时遇到了麻烦。我的数据框如下所示:

df = pd.DataFrame({'col1': ['id 1', 'id 2', 'test 3', 'test 4'],
               'col2': ['test 1', 'test 2',
                        'Number 6135', 'id 4'],
               'col3': ['Number 12344', 'Number 21612','id 3','Number 1131']})

在此处输入图像描述

如您所见,我在第一列、第二列和第三列中有“id´s”。其他值也一样。

我的目标是拥有一个数据框,其中每个 Col 只有以相同子字符串开头的值,如下例所示:

在此处输入图像描述

我已经尝试使用 for 循环和 if 语句来检查某个子字符串是否在我的字符串中。如果这是真的,我创建一个新列并在其中写入我的值

for x in df['col1']:
if 'id' in x:
    df['newCol']=x

我知道这段代码永远不会解决我的问题,也许有一些 pandas 函数可以帮助我解决这个问题

如果有不清楚的地方,请问我,我会尽力解释我的问题。

标签: pythonpandasdataframe

解决方案


您可以使用sorted()自定义键功能:

def key_fn(x):
    if 'id' in x:
        return 0
    if 'test' in x:
        return 1
    if 'Number' in x:
        return 2
    return 3 

df = df.apply(lambda x: pd.Series(sorted(x, key=key_fn)), axis=1)
df = df.rename(columns=lambda x: 'col{}'.format(x+1))
print(df)

印刷:

   col1    col2          col3
0  id 1  test 1  Number 12344
1  id 2  test 2  Number 21612
2  id 3  test 3   Number 6135
3  id 4  test 4   Number 1131

另一个版本,来自评论:

df = pd.DataFrame([sorted(l, key=key_fn) for l in df.values], columns=df.columns)
print(df)

推荐阅读