繁体   English   中英

从现有数据框列创建新数据框

[英]Make new dataframe from existing dataframe columns

我有一个Dataframe1 ,我需要从中形成新的Dataframe2 ,如下所示。 如果Dataframe1.name = An1将从Dataframe1 Status列中选择值,类似地,如果Dataframe1.Name = Bn2将从列Status获取值。 此外, Timestampid将具有唯一值。 有人可以帮忙吗?

输入数据Dataframe1

ID 时间戳 姓名 地位
1 02:15:00 一种 错误的
1 02:15:00 真的
2 03:00:00 一种 真的
2 03:00:00 错误的

输出数据Dataframe2

ID 时间戳 n1 n2
1 02:15:00 错误的 真的
2 03:00:00 真的 错误的

您要做的是对具有特殊名称的数据进行透视。 如果您将Ab值重命名为n1n2那么您唯一要做的就是使用pandas.pivot_table函数。 因为作为它的聚合函数,它使用平均字符串不能开箱即用。 您必须提供自己的聚合函数。 因为在我们的情况下,每一行都是唯一的,我们可以给聚合函数以获取该行的值。

dataframe1['Name'] = dataframe1['Name'].replace({'A': 'n1', 'b': 'n2'})
dataframe1.pivot_table(index=['id', 'Timestamp'], 
                       columns='Name', 
                       values='Status', 
                       aggfunc=lambda x:x).reset_index()

您可以使用pandas.pivot_table

df2 = df.pivot_table(index=['id','Timestamp'], columns='Name', values='Status').reset_index().set_index('id')
df2.columns = ['Timestamp','n1','n2']

输出:

>>> df2
    Timestamp   n1     n2
id  
1   02:15:00    FALSE   TRUE
2   03:00:00    TRUE    FALSE

使用 pivot_table 然后调整结果标题。

import pandas as pd
df = pd.read_excel('test.xls', index_col = False)

df2 = df.pivot_table(index = ['id', 'Timestamp'], columns = 'Name', values = 'Status').reset_index().rename_axis(None, axis=1).rename(columns = {'A': 'n1', 'B': 'n2'})


print(df2)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM