Python 使用if语句重建数据帧
正如allready在另一个题为“重建熊猫数据框架”的问题中所问的那样,我仍然有一些关于继续使用更多列的问题 情况: 我有一个4列的数据框,列中的值是非常随机的。例如这个例子:Python 使用if语句重建数据帧,python,pandas,if-statement,Python,Pandas,If Statement,正如allready在另一个题为“重建熊猫数据框架”的问题中所问的那样,我仍然有一些关于继续使用更多列的问题 情况: 我有一个4列的数据框,列中的值是非常随机的。例如这个例子: df = pd.DataFrame({'col1': ['id 1', 'id 2', 'test 3', 'test 4'], 'col2': ['test 1', 'test 2', 'ne 5261', 'id 4'], 'col3
df = pd.DataFrame({'col1': ['id 1', 'id 2', 'test 3', 'test 4'],
'col2': ['test 1', 'test 2',
'ne 5261', 'id 4'],
'col3': ['Number 12344', 'Number 21612','id 3','Number 1131'],
'col4':['ne 315','Number 1264777','ne 1415','ne 52']})
我的目标是创建一个数据帧,其中每个列仅具有以相同子字符串开头的值,如以下示例所示:
df = pd.DataFrame({'col1': ['id 1', 'id 2', 'test 3', 'test 4'],
'col2': ['test 1', 'test 2',
'ne 5261', 'id 4'],
'col3': ['Number 12344', 'Number 21612','id 3','Number 1131'],
'col4':['ne 315','Number 1264777','ne 1415','ne 52']})
以下代码已经适用于3个专栏(从最后一个问题到:@AndrejKesely):
打印(df)
由于我现在有4个col,我在函数中添加了另一个if语句,如下所示:
def key_fn(x):
if 'id' in x:
return 0
if 'test' in x:
return 1
if 'Number' in x:
return 2
if 'ne' in x:
return 3
return 4
df = pd.DataFrame([sorted(l, key=key_fn) for l in df.values], columns=df.columns)
这给了我以下输出:
这是一个小例子,当我了解它的工作原理时,我需要将其应用于总共17列。
提前感谢您的帮助
df = pd.DataFrame({'col1': ['id 1', 'id 2', 'test 3', 'test 4'],
'col2': ['test 1', 'test 2',
'ne 5261', 'id 4'],
'col3': ['Number 12344', 'Number 21612','id 3','Number 1131'],
'col4':['ne 315','Number 1264777','ne 1415','ne 52']})
def key_fn(x):
if 'id' in x:
return 0
if 'test' in x:
return 1
if 'Number' in x:
return 2
if 'ne' in x:
return 3
return 4
out_df = pd.DataFrame(np.array(sorted(np.ravel(df.values), key=key_fn)).reshape(df.shape), columns=df.columns).T
print(out_df)
印刷品:
col1 col2 col3 col4
0 id 1 test 1 Number 12344 ne 315
1 id 2 test 2 Number 21612 ne 5261
2 id 3 test 3 Number 1264777 ne 1415
3 id 4 test 4 Number 1131 ne 52