![](/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.