从其他数据帧获取数据帧

2024-09-27 00:20:16 发布

您现在位置:Python中文网/ 问答频道 /正文

This is my dataframe

     Date       Name  Count
0   Sep-2015    Adam    3
1   Sep-2015    David   3
2   Sep-2015    Adam    4
3   Sep-2015    Adam    3
4   Sep-2015    David   6
5   Sep-2015    Hardik  1
6   Sep-2015    David   3

Now I want to unique Name with respect to Date and enter in other dataframe. I tried this

 df = pd.DataFrame((['Sep-2015',  'Adam',3 ],         
['Sep-2015',  'David',3],
['Sep-2015',  'Adam',4],                   
['Sep-2015',  'Adam' ,3],         
['Sep-2015',  'David',6],         
['Sep-2015' , 'Hardik',1],        
['Sep-2015' , 'David' ,3]),columns=['Date','Name','Count'])
df = df.drop_duplicates(['Date', 'Name'], keep='last')
df2 = pd.DataFrame ({i : [j for j in df['Count']] for i in df['Name']},index = [i for i in df['Date']])

I am getting this

         Adam   Hardik  David
Sep-2015    3      3    3
Sep-2015    1      1    1
Sep-2015    3      3    3

Here data entry is somewhere wrong. The following is the expected output.

           Adam   Hardik    David
Sep-2015    3        1       3

Tags: tonameindataframedffordateis
3条回答

第一个问题来自index=[i for i in df['Date']]。一旦您这样做,它将为每个组件在df['Date']中放置一行:您在2015年9月连续三次,因此它将创建三行:['Sep-2015', 'Sep-2015', 'Sep-2015']

第二个问题来自{i : [j for j in df['Count']] for i in df['Name']},它对应于{'Adam': [3, 1, 3], 'Hardik': [3, 1, 3], 'David': [3, 1, 3]}。我想那不是你所期望的

假设您想要的输出,我猜您想要的是:{'Adam': [3], 'Hardik': [1], 'David': [3]}['Sep-2015']

实现这一目标的一个想法是事先建造它,我的建议如下:

a={}
for i in range(df['Name'].size):
    a[df['Name'].iloc[i]]=df['Count'].iloc[i]

dftest=pd.DataFrame (a,index = [i for i in df['Date'].drop_duplicates()])

当然,可以修改循环以管理您的期望,特别是如果您的计划中有不同的日期

运行完drop_duplicates()后,您就在这里:

       Date    Name  Count
3  Sep-2015    Adam      3
5  Sep-2015  Hardik      1
6  Sep-2015   David      3

尝试使用pd.pivot_table()如下所示:

pd.pivot_table(df1,index='Date',columns='Name',values='Count').reset_index()

这将给你:

Name      Date  Adam  David  Hardik
0     Sep-2015     3      3       1

您要做的是一个透视表pandas已经有一个名为pd.pivot_table的方法

尝试:

# import pandas
import pandas as pd


# the example dataframe
df = pd.DataFrame((['Sep-2015',  'Adam',3 ],         
['Sep-2015',  'David',3],
['Sep-2015',  'Adam',4],                   
['Sep-2015',  'Adam' ,3],         
['Sep-2015',  'David',6],         
['Sep-2015' , 'Hardik',1],        
['Sep-2015' , 'David' ,3]),columns=['Date','Name','Count'])

# drop duplicates
df = df.drop_duplicates(['Date', 'Name'], keep='last')

#pivot table
pd.pivot_table(data = df, values = 'Count', columns = 'Name', index = 'Date').reset_index()

输出:

Date      Adam  David  Hardik                         
Sep-2015     3      3       1

相关问题 更多 >

    热门问题