我已经获得了数据,我使用Pandas(在Python中)从CSV读取数据帧。 CSV看起来基本如下:
image img1.jpg
date Thursday, May 5
link bit.ly/asdf
subject 'Unique subject line 1'
image img2.jpg
date Tuesday, May 17
link bit.ly/zxcv
subject 'Unique subject line 2'
image img3.jpg
date Monday, May 9
link bit.ly/sdfg
subject 'Unique subject line 3'
我希望将其放入一个数据框中,其中每个唯一的分组都在一行中,当前在第1列中列为行数据的属性作为列名。如下所示:
image date link subject
img1.jpg Thursday, May 5 bit.ly/asdf 'Unique subject line 1'
img2.jpg Tuesday, May 17 bit.ly/zxcv 'Unique subject line 2'
img3.jpg Monday, May 9 bit.ly/sdfg 'Unique subject line 3'
我已尝试使用pandas.pivot_table
,并且只使用我想要的列创建一个空数据框,但使用这两种方法时,我在索引或聚合方面遇到了问题。我认为这是因为我没有按任何一个属性进行分组,而且我没有尝试聚合任何数字数据。
看起来应该很简单以这种方式重塑数据,但我不确定如何定义我想要的分组。有没有办法使用pivot_table
执行此操作,还是最好以其他方式执行此操作?
答案 0 :(得分:1)
问题在于,由于当前格式化的数据,在枢轴期间没有一种独特的方式对图像进行分组。在枢轴期间,任何日期都可以与.example {
transition-property: opacity;
transition-duration: 2s; /* This will happen after the hover state and can also be used for consistency on the overall experience */
opacity: 0;
}
.example:hover {
opacity: .8;
transition-duration: .3s;
transition-delay: .1s;
}
分组,因为没有任何其他数据说明哪个日期应对应于每个图像。
要解决此问题,我们只需添加一个包含分组信息的附加列。根据您的输出判断,分组基本按行顺序排列;前4行放在一起,接下来的4行放在一起,等等。要枚举这样的重复,numpy.repeat
很有用,你只需要知道图像和属性的数量。一些基本的数学运算允许我们获得一般的图像数量和属性数量:
img1.jpg
现在,它可以直接转动:
# Add an grouping column.
nbr_images = (df['col1'] == 'image').sum()
nbr_attributes = len(df)/nbr_images
df['image_group'] = np.repeat(range(nbr_images), nbr_attributes)
结果输出:
# Pivot the DataFrame.
pivoted_df = df.pivot(columns='col1', index='image_group', values='col2')
# Clear the index and column name.
pivoted_df.index.name = None
pivoted_df.columns.name = None
答案 1 :(得分:0)
我认为您可以使用cumsum
创建image_group
,然后pivot
创建rename_axis
(pandas
0.18.0
中的新内容):
df['image_group'] = (df.col1 == 'image').cumsum() - 1
print df.pivot(columns='col1', index='image_group', values='col2')
.rename_axis(None)
.rename_axis(None, axis=1)
date image link subject
0 Thursday, May 5 img1.jpg bit.ly/asdf 'Unique subject line 1'
1 Tuesday, May 17 img2.jpg bit.ly/zxcv 'Unique subject line 2'
2 Monday, May 9 img3.jpg bit.ly/sdfg 'Uniquesubject line 3'
或者你可以使用一行:
print pd.pivot(columns=df['col1'],
index=(df.col1 == 'image').cumsum() - 1,
values=df['col2'])
.rename_axis(None)
.rename_axis(None, axis=1)
date image link subject
0 Thursday, May 5 img1.jpg bit.ly/asdf 'Unique subject line 1'
1 Tuesday, May 17 img2.jpg bit.ly/zxcv 'Unique subject line 2'
2 Monday, May 9 img3.jpg bit.ly/sdfg 'Uniquesubject line 3'
编辑:如果原始DataFrame的列为0
且1
使用iloc
进行选择:
print pd.pivot(columns=df.iloc[:,0],
index=(df.iloc[:,0] == 'image').cumsum() - 1,
values=df.iloc[:,1])
.rename_axis(None)
.rename_axis(None, axis=1)
date image link subject
0 Thursday, May 5 img1.jpg bit.ly/asdf 'Unique subject line 1'
1 Tuesday, May 17 img2.jpg bit.ly/zxcv 'Unique subject line 2'
2 Monday, May 9 img3.jpg bit.ly/sdfg 'Uniquesubject line 3'