如何转换 python 数据框,以便将唯一的行值转置为列,并将另一列的值变为它们的行
How to transform python data frame such that unique row values are transposed to columns and values of another column become their rows
总结
我正在使用 Python 2.7。我有一个包含所有分类变量的数据框,即数据类型是字符串。我想将一列的唯一行值转换为多列。此外,这些结果列的值必须具有来自另一列的相应值。为了详细描述,我提供了一个可重现的数据框架和预期输出供您参考。
需要转置的Dataframe可以按如下方式创建:
import pandas as pd
codes = ['codeA','codeB', 'codeC']
variables = ['textA','textA','textB']
dataset = list(zip(codes,variables))
df = pd.DataFrame(data = dataset, columns=['codes','variables'])
df['string'] = 'string1'
需要转置的数据框如下所示:
df
codes variables string
0 codeA textA string1
1 codeB textA string1
2 codeC textB string1
预期的最终输出应该是这样的:
textA textB string
codeA string1
codeB
codeC string1
注:objective为转置。我不太关心空格是 NULL 值还是零。
我不确定您示例中的最后一列,因为它似乎与其余转换不一致。无论如何,我认为使用 pandas get_dummies
函数转换变量列可能是一个不错的起点。
import pandas as pd
codes = ['codeA','codeB', 'codeC']
variables = ['textA','textA','textB']
dataset = list(zip(codes,variables))
df = pd.DataFrame(data = dataset, columns=['codes','variables'])
df['string'] = 'string1'
df = pd.get_dummies(df, columns=['variables'])
df.variables_textA = df.codes.where(df.variables_textA.astype(bool),0)
df.variables_textB = df.codes.where(df.variables_textB.astype(bool),0)
columns = ['variables_textA', 'variables_textB','string']
df = df[columns]
总结
我正在使用 Python 2.7。我有一个包含所有分类变量的数据框,即数据类型是字符串。我想将一列的唯一行值转换为多列。此外,这些结果列的值必须具有来自另一列的相应值。为了详细描述,我提供了一个可重现的数据框架和预期输出供您参考。
需要转置的Dataframe可以按如下方式创建:
import pandas as pd
codes = ['codeA','codeB', 'codeC']
variables = ['textA','textA','textB']
dataset = list(zip(codes,variables))
df = pd.DataFrame(data = dataset, columns=['codes','variables'])
df['string'] = 'string1'
需要转置的数据框如下所示:
df
codes variables string
0 codeA textA string1
1 codeB textA string1
2 codeC textB string1
预期的最终输出应该是这样的:
textA textB string
codeA string1
codeB
codeC string1
注:objective为转置。我不太关心空格是 NULL 值还是零。
我不确定您示例中的最后一列,因为它似乎与其余转换不一致。无论如何,我认为使用 pandas get_dummies
函数转换变量列可能是一个不错的起点。
import pandas as pd
codes = ['codeA','codeB', 'codeC']
variables = ['textA','textA','textB']
dataset = list(zip(codes,variables))
df = pd.DataFrame(data = dataset, columns=['codes','variables'])
df['string'] = 'string1'
df = pd.get_dummies(df, columns=['variables'])
df.variables_textA = df.codes.where(df.variables_textA.astype(bool),0)
df.variables_textB = df.codes.where(df.variables_textB.astype(bool),0)
columns = ['variables_textA', 'variables_textB','string']
df = df[columns]