python - 重建熊猫数据框
问题描述
我对 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 函数可以帮助我解决这个问题
如果有不清楚的地方,请问我,我会尽力解释我的问题。
解决方案
您可以使用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)
推荐阅读
- android - 如何在 Android 应用程序中创建设置屏幕?
- gcc - 为什么我切换到用汇编编写的 16 位函数没有返回到我的内核?
- python - 如何从 csv 文件中读取数据并将 python POST 请求解析为 dict 格式
- python - Pandas read_sql() - AttributeError: 'Engine' 对象没有属性 'cursor'
- python - pyspark数据帧中的分布式for循环
- php - 使用 PHP 和 Html 表单部署 VM
- python - 得到错误“分配前引用的局部变量 - 如何修复?
- django - 从 django rest 端点获取响应(搜索栏)
- c++ - 这是病毒还是sdk附件?
- javascript - 如何找到包含这些 ID 的 Array 元素?