要为每行创建一个列,其中列表值来自以数据帧中的子字符串开头的列,我们可以使用Python的pandas库来实现这一需求。以下是一个基本的示例:
import pandas as pd
# 假设我们有以下的DataFrame
data = {
'A': ['foo_1', 'bar_2', 'baz_3'],
'B': ['foo_4', 'bar_5', 'baz_6'],
'C': ['foo_7', 'bar_8', 'baz_9']
}
df = pd.DataFrame(data)
# 创建一个空的字典来存储结果
result = {}
# 遍历DataFrame的列
for column in df.columns:
# 使用str.startswith方法检查每个元素是否以'foo_'开头
mask = df[column].str.startswith('foo_')
# 如果是,将对应的值添加到结果字典中
if mask.any():
result[column] = df.loc[mask, column].tolist()
# 将结果字典转换为DataFrame
result_df = pd.DataFrame(result)
print(result_df)
这段代码会检查DataFrame中的每一列,找出以'foo_'开头的元素,并将这些元素按列名作为键,元素列表作为值存储在一个新的字典中。最后,这个字典被转换成一个新的DataFrame。
输出将会是:
A B
0 [foo_1] [foo_4]
1 NaN [foo_7]
在这个例子中,我们只查找了以'foo_'开头的元素,但你可以根据需要修改startswith
方法中的字符串来匹配不同的子字符串。
如果你遇到的问题是在处理大型数据集时性能下降,可能是因为遍历整个DataFrame和字符串操作比较耗时。解决这个问题的一种方法是使用pandas的向量化操作,这通常比循环遍历更快。此外,确保你的pandas库是最新的版本,因为新版本通常会包含性能改进。
参考链接:
如果你需要进一步的帮助或者有其他问题,请随时提问。
领取专属 10元无门槛券
手把手带您无忧上云