我有一个数据框,显示特定组织所属的细分。我想为Org ID上的左连接合并准备数据框与其他组织数据。
当前,此df在一个单独的行中显示从上到下的信息,每个段(带有org id)。下面是df的示例以及我想要使用它的示例。
当前df结构
需要df结构
段数上限为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)
结果:
答案 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()