python - 如何根据给定键 :value pair in the column in pandas? 的行创建列

标签 python pandas transpose

我有这样的 DF:

pd.DataFrame({'label':['A','test1: A','test2: A','B','test1: B','test3: B'],
             'value': [1,2,3,4,5,6]})

      label  value
0         A      1
1  test1: A      2
2  test2: A      3
3         B      4
4  test1: B      5
5  test3: B      6

我需要转换成这样:

pd.DataFrame({'label':['A','B'],
             'value': [1,4],
             'test1:':[2,5],
             'test2:':[3,None],
             'test3:':[None,6]})

  label  value  test1:  test2:  test3:
0     A      1       2     3.0     NaN
1     B      4       5     NaN     6.0

我需要保留唯一值的标签,并且如果数据中存在键,则将其合并到右侧。键可能会有所不同,并且一个值的名称可能不同。

请随意分享如何重命名问题,因为我找不到更好的方法来命名问题。

编辑: 部分this solution包含我需要的内容,但是没有合适的方法可以在标签列中添加表示键的列。理想情况下,需要类似带有 df 输入的函数。

最佳答案

将信息提取到两个数据框中并合并它们。

df2 = df[df['label'].str.contains('test')]
df3 = df2['label'].str.split(expand=True).rename(columns={0: "test", 1: "label"})
df3['value'] = df2['value']
df3 = df3.pivot_table(index='label', columns='test', values='value')
df2 = df[~df['label'].str.contains('test')]
df4 = pd.merge(df2, df3, on='label')

输出

  label  value  test1:  test2:  test3:
0     A      1     2.0     3.0     NaN
1     B      4     5.0     NaN     6.0

关于python - 如何根据给定键 :value pair in the column in pandas? 的行创建列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62862344/

相关文章:

python - 在 python 中画一条线直到掩码 OpenCV 的边缘

python - aiohttp.ClientSession().post

python - 使用正则表达式查找数字后跟点

python - 将数据从 excel 导入 Python 时排除第一行

sas - 如何将列的值移动为新变量名?

c# - 如何转置矩阵?

python - 如何使用pandas对时间序列数据进行重采样

Python、Pandas 匹配数据框并指示列表中的结果

python - 我怎样才能让 xticks 在我的 matplotlib 图上有一个每月的间隔而不是每天

r - 将没有 "timevar"的数据帧从长格式转换为宽格式