Python 如何按每个唯一术语和;日期输入到df中,每个日期包含一行,带有唯一术语+;它们的值作为列吗?

Python 如何按每个唯一术语和;日期输入到df中,每个日期包含一行,带有唯一术语+;它们的值作为列吗?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个csv或数据框,它看起来像这样,但包含数十万行: df = {'Date': {0: '2014-01-01, 1: '2014-01-01', 2: '2014-01-01', 3: '2014-01-02', 4: '2014-01-02'}, 'Name': {0: 'John', 1: 'John', 2: 'Rob', 3: 'Mel', 4: 'Rob'}, 'Rank': {0: 1, 1: 3, 2: 2, 3: 5, 4: 6},

我有一个csv或数据框,它看起来像这样,但包含数十万行:

df = {'Date': {0: '2014-01-01,
  1: '2014-01-01',
  2: '2014-01-01',
  3: '2014-01-02',
  4: '2014-01-02'},
 'Name': {0: 'John',
  1: 'John',
  2: 'Rob',
  3: 'Mel',
  4: 'Rob'},
 'Rank': {0: 1, 1: 3, 2: 2, 3: 5, 4: 6},
 'Count': {0: 10, 1: 3, 2: 9, 3: 11, 4: 4}}
每个日期的名称都会重复出现,但计数和排名会发生变化。我不想像现在这样在每个日期为这些名称中的每一个指定一行,而是希望对数据框进行安排,以便每个日期都有一个值。也就是说,我希望我的桌子看起来像这样:

Date        John_Rank   Rob_Rank    Mel_rank  John_count   Mel_count   Rob_count  
2014-01-01    ...         ...          ...        ...         ...
2014-01-02    ...         ...          ...        ...         ...
我想用这种格式来计算排名的差异。我以前曾多次遇到过这种情况,但在很长一段时间内都没有这么多行需要处理——到目前为止,我只是手动完成了这项工作。任何建议都将不胜感激

我认为您可以使用默认值
aggfunc='mean'

import pandas as pd

d = {'Date': {0: '2014-01-01',
  1: '2014-01-01',
  2: '2014-01-01',
  3: '2014-01-02',
  4: '2014-01-02'},
 'Name': {0: 'John',
  1: 'John',
  2: 'Rob',
  3: 'Mel',
  4: 'Rob'},
 'Rank': {0: 1, 1: 3, 2: 2, 3: 5, 4: 6},
 'Count': {0: 10, 1: 3, 2: 9, 3: 11, 4: 4}}
df = pd.DataFrame(d)
print df
   Count        Date  Name  Rank
0     10  2014-01-01  John     1
1      3  2014-01-01  John     3
2      9  2014-01-01   Rob     2
3     11  2014-01-02   Mel     5
4      4  2014-01-02   Rob     6

df = pd.pivot_table(df, index='Date', columns='Name')
df.columns = ['_'.join(col).strip() for col in df.columns.values]
print df
            Count_John  Count_Mel  Count_Rob  Rank_John  Rank_Mel  Rank_Rob
Date                                                                       
2014-01-01         6.5        NaN          9          2       NaN         2
2014-01-02         NaN         11          4        NaN         5         6
或者,如果要在列中使用
多索引

df = pd.pivot_table(df, index='Date', columns='Name')
df.columns  =  df.columns.swaplevel(0,1)
df.columns = ['_'.join(col).strip() for col in df.columns.values]
print df
            John_Count  Mel_Count  Rob_Count  John_Rank  Mel_Rank  Rob_Rank
Date                                                                       
2014-01-01         6.5        NaN          9          2       NaN         2
2014-01-02         NaN         11          4        NaN         5         6

请澄清您希望在这些列中显示的内容。示例数据包含同一日期的两个“John”值。那一天你打算在John_Rank栏里放什么?