我具有以下格式的数据集
class HomeControllerTableView: UITableViewController{
var coursesPicture = [CoursePicture]()
var courseURL = [CourseURL]()
// MARK: - CoursePicture
struct CoursePicture: Codable {
let links: LinksPICTURE
enum CodingKeys: String, CodingKey {
case links = "_links"
}
}
// MARK: - Links
struct LinksPICTURE: Codable {
let wpFeaturedmedia: [WpFeaturedmedia]
enum CodingKeys: String, CodingKey {
case wpFeaturedmedia = "wp:featuredmedia"
}
}
// MARK: - WpFeaturedmedia
struct WpFeaturedmedia: Codable {
let href: String
}
struct CourseURL: Codable {
let guid: GUIDURL
}
// MARK: - GUID
struct GUIDURL: Codable {
let rendered: String
}
@IBOutlet weak var imageView: UIImageView!
var hello = ""
var hello2 = ""
override func viewDidLoad() {
super.viewDidLoad()
imageView.autoresizingMask = [.flexibleWidth, .flexibleHeight, .flexibleBottomMargin, .flexibleTopMargin, .flexibleBottomMargin]
imageView.contentMode = .scaleAspectFill
tableView.isScrollEnabled = false
tableView.rowHeight = UITableView.automaticDimension
tableView.backgroundColor = .clear
self.tableView.backgroundView = imageView
tableView.addSubview(imageView)
fetchJSON()
fetchJSONPicture()
request()
fetchJSONURL()
}
public func fetchJSONPicture() {
let urlString = "EXAMPLE_URL"
guard let url = URL(string: urlString) else { return }
URLSession.shared.dataTask(with: url) { (data, _, err) in
if let err = err {
print("Failed to get data from url:", err)
return
}
guard let data = data else { return }
do {
self.coursesPicture = [try JSONDecoder().decode(CoursePicture.self, from: data)]
DispatchQueue.main.async {
self.tableView.reloadData()
}
} catch let jsonErr {
print("Failed to decode:", jsonErr)
}
}.resume()
}
public func fetchJSONURL() {
let urlString = hello
guard let url = URL(string: urlString) else { return }
URLSession.shared.dataTask(with: url) { (data, _, err) in
DispatchQueue.main.async {
if let err = err {
print("Failed to get data from url:", err)
return
}
guard let data = data else { return }
do {
self.courseURL = [try JSONDecoder().decode(CourseURL.self, from: data)]
DispatchQueue.main.async {
self.tableView.reloadData()
}
} catch let jsonErr {
print("Failed to decode:", jsonErr)
}
}
}.resume()
if let url = URL(string: hello2) {
URLSession.shared.dataTask(with: url) { (data, urlResponse, error) in
if let data = data {
DispatchQueue.main.async {
self.imageView.image = UIImage(data: data)
}
}
}.resume()
}
}
}
func request() {
let coursePicture = coursesPicture[0]// Index out of Range error
let courseUrl = courseURL[0] // Index out of Range error
hello = coursePicture.links.wpFeaturedmedia[0].href
hello2 = courseUrl.guid.rendered
}
}
如何使用大熊猫获取以下格式?
source adset date impression click spend
fb abc 1/1/19 100 140 20
fb abc 1/2/19 200 130 40
cl xyz 1/1/19 300 200 50
cl xyz 1/2/19 500 200 50
答案 0 :(得分:2)
您可以通过DataFrame.set_index
,DataFrame.stack
和Series.unstack
重塑形状:
df1 = (df.set_index(['source','adset','date'])
.rename_axis('kpi', axis=1)
.stack()
.unstack(level=2)
.reset_index())
print (df1)
date source adset kpi 1/1/19 1/2/19
0 cl xyz impression 300 500
1 cl xyz click 200 200
2 cl xyz spend 50 50
3 fb abc impression 100 200
4 fb abc click 140 130
5 fb abc spend 20 40
使用DataFrame.melt
和DataFrame.pivot_table
的另一种解决方案:
df1 = (df.melt(['source','adset','date'], var_name='kpi')
.pivot_table(index=['source','adset', 'kpi'], columns='date', values='value')
.reset_index())
print (df1)
date source adset kpi 1/1/19 1/2/19
0 cl xyz click 200 200
1 cl xyz impression 300 500
2 cl xyz spend 50 50
3 fb abc click 140 130
4 fb abc impression 100 200
5 fb abc spend 20 40