我有以下类别的< code>Dataframe列:
data = {'People': ['John','Mary','Andy','April'],
'Class': ['Math, Science','English, Math, Science','Math, Science','Science, English, Math']}
df = pd.DataFrame(data, columns = ['People', 'Class'])
如何创建新列并将数据帧
转换为:
> | People | Math | Science | English |
> -------------------------------------
> | John | Math | Science | |
> | Mary | Math | Science | English |
> | Andy | Math | Science | |
> | April | Math | Science | English |
这是一个解决方案,
# Strip-out white spaces before `,\s+`, use dummies to create categorical variable
df = df.set_index('People')
dummies = (
df.Class.str.replace(',\s+', ",", regex=True)
.str.get_dummies(sep=",")
)
English Math Science
0 0 1 1
1 1 1 1
2 0 1 1
3 1 1 1
# Create a "hash map" to substitute categorical data
replace_ = {i : j for i, j in enumerate(dummies.columns, 1)}
# multiply keys with & replace to fill in the column values.
dummies.mul(list(replace_.keys())).replace(replace_)
English Math Science
People
John 0 Math Science
Mary English Math Science
Andy 0 Math Science
April English Math Science
以下代码可能对您有所帮助
columns = set([x for lst in df['Class'] for x in lst.replace(" ", "").split(",") ])
for col in columns:
df[col] = ""*len(df)
for i, val in enumerate(df["Class"]):
cl = val.replace(" ", "").split(",")
print(cl)
for value in cl:
df.loc[i][value] = value
df.drop('Class', axis=1, inplace=True)
输出:
People Science English Math
0 John Science Math
1 Mary Science English Math
2 Andy Science Math
3 April Science English Math
.get_dummies
获取 Class
列的 1 和 0 表np.where
将 1 替换为列名,将 0 替换为空字符串。断续器Class.str.get_dummies(', ').apply(lambda x: np.其中(x == 1, x.name, ''))
创建一个单独的数据帧,我们使用 .join
将其合并回 df
。.删除
不需要的“类
”列。import pandas as pd
import numpy as np
updated = df.join(df.Class.str.get_dummies(', ').apply(lambda x: np.where(x == 1, x.name, ''))).drop(columns=['Class'])
# display(updated)
People English Math Science
0 John Math Science
1 Mary English Math Science
2 Andy Math Science
3 April English Math Science
理想情况下,我希望这些新列也被命名。
我不知道如何使用来实现拆分行单元格的目标。我可以使用添加一个新列,并用填充它。有什么想法吗?
问题内容: 我想将字符串“ aaaabbbccccaaddddcfggghhhh”拆分为“ aaaa”,“ bbb”,“ cccc”。“ aa”,“ dddd”,“ c”,“ f”等。 我尝试了这个: 但这会吃掉一个字符,因此使用上面的正则表达式我得到“ aaa”,而我希望它成为“ aaaa”作为第一个字符串。 我该如何实现? 问题答案: 试试这个: 说明:我们想将字符串分成相同字符的组,因此我们
我有这样的绳子: 这是一个文本[空格]这也是文本[空格]更多的文本[空格]这里的文本 我的目标是创建这样的数组: 或者像这样 我尝试过这样拆分它。拆分('['),但这并不是我想要的
问题内容: 我对Regex的经验不足,但是我已经阅读了很多。假设有一个字符串,我想要一个列表,该列表的字符串分为两个部分。我的方法是让一个小组检查是否是数字,然后检查该小组是否重复。像这样 我认为基本上可以检查“ digit”或“ digit +”是否相同。我认为这可以满足我的要求。 问题答案: 用途:
问题内容: 我需要在SQL Server 2012中将一列中的字符串拆分为一个字符,并将每个字符串拆分成它自己的列。 例如:如果我有一个栏,我需要把它拆分成,,,,,与每个这些转化为自己列。 要拆分的列的长度可能会有所不同,因此我需要使其尽可能地动态。 问题答案: 您可以这样做: 输出: 这是动态版本: