![](/img/trans.png)
[英]Make new dataframe from existing dataframe by removing duplicates from columns
[英]Make new dataframe from existing dataframe columns
我有一个Dataframe1
,我需要从中形成新的Dataframe2
,如下所示。 如果Dataframe1.name = A
列n1
将从Dataframe1
Status
列中选择值,类似地,如果Dataframe1.Name = B
列n2
将从列Status
获取值。 此外, Timestamp
和id
将具有唯一值。 有人可以帮忙吗?
输入数据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 | 真的 | 错误的 |
您要做的是对具有特殊名称的数据进行透视。 如果您将A
和b
值重命名为n1
和n2
那么您唯一要做的就是使用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.