重新组织pandas数据框以水平显示数据

时间:2017-10-11 21:42:43

标签: python python-3.x pandas

我有一个数据框,显示特定组织所属的细分。我想为Org ID上的左连接合并准备数据框与其他组织数据。

当前,此df在一个单独的行中显示从上到下的信息,每个段(带有org id)。下面是df的示例以及我想要使用它的示例。

当前df结构

enter image description here

需要df结构

enter image description here

段数上限为10,每个段都有一个唯一的名称,如航空航天和建筑。

我一直在寻找一个起点,让它完成几个小时并且没有运气。

有人能为此提供一个起点吗?

编辑:使用pd.crosstab

df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 13 entries, 0 to 12
Data columns (total 3 columns):
Org ID      13 non-null object
Org Name    13 non-null object
Segment     13 non-null object
dtypes: object(3)
memory usage: 392.0+ bytes

代码:

file = "sample-data.csv"
path = root + file
name_cols = ['Org ID', 'Org Name', 'Segment']
pull_cols = ['Org ID', 'Org Name', 'Segment']
df = pd.read_csv(path, header=None, encoding="ISO-8859-1", names=name_cols, 
                       usecols=pull_cols, index_col=False)
df = pd.crosstab([df['Org ID'], df['Org Name']], df['Segment']).reset_index()
df.head(10)

结果:

enter image description here

2 个答案:

答案 0 :(得分:2)

您可以使用pd.crosstab

df = df.drop_duplicates()
pd.crosstab([df['Org ID'], df['Org Name']], df['Segment']).reset_index()

实施例

df = pd.DataFrame({
    'A': ['a', 'a', 'b', 'b', 'c'],
    'B': [1, 2, 2, 3, 4],
    'C': ['seg1', 'seg1', 'seg2', 'seg2', 'seg3']
})

df = df.drop_duplicates()
pd.crosstab([df.A, df.B], df.C).reset_index()
#C  A   B   seg1    seg2    seg3
#0  a   1      1       0    0
#1  a   2      1       0    0
#2  b   2      0       1    0
#3  b   3      0       1    0
#4  c   4      0       0    1

答案 1 :(得分:2)

您可以使用pivot_table()方法:

df.pivot_table(index=['Org ID','Org Name'], columns='Segment', 
               aggfunc='size', fill_value=0) \
  .reset_index()