下面的DataFrame需要重新打包,以便我在一行中拥有每个区域的所有值。在下面的例子中,新的df只有3行,每个区域一行。然后,相应的值将沿多列扩展。
地区可能会有所不同,可能会超过3.任何建议都表示赞赏。
function appAjax(url) {
alert(url);
var response = null;
jQuery.ajax({
url: url,
dataType: "html",
success: function (data, textStatus, jqXHR) {
response = data;
appWindow(data);
},
error: function (jqXHR, textStatus, errorThrown) {
alert(textStatus);
alert(errorThrown);
}
});
}
function appWindow(data) {
//alert(data);
$.colorbox({html: data, width: 1100, height: 500});
}
期望的输出:
>>> a
Out[26]:
Area value
0 EUROPE 47
1 ASIA 51
2 AMERICAS 37
3 EUROPE 39
4 ASIA 22
5 AMERICAS 24
值应分布在不同的列
中答案 0 :(得分:3)
In [75]:
df.groupby('Area')['value'].apply(list).reset_index()
Out[75]:
Area value
0 AMERICAS [37, 24]
1 ASIA [51, 22]
2 EUROPE [47, 39]
这将处理可变数量的值
如果您要将值拆分出来,可以致电apply
并传递pd.Series
ctor:
In [90]:
df1 = df.groupby('Area')['value'].apply(lambda x: list(x)).reset_index()
df1[['val1', 'val2']] = df1['value'].apply(pd.Series)
df1
Out[90]:
Area value val1 val2
0 AMERICAS [37, 24] 37 24
1 ASIA [51, 22] 51 22
2 EUROPE [47, 39] 47 39
修改强>
对于可变数量的列,如果您不知道最大值数是多少,则无法预先分配,但您仍然可以使用上述内容:
In [94]:
import io
import pandas as pd
t="""index Area value
0 EUROPE 47
1 ASIA 51
2 AMERICAS 37
3 EUROPE 39
4 ASIA 22
5 AMERICAS 24
5 AMERICAS 50"""
df = pd.read_csv(io.StringIO(t), sep='\s+')
df
Out[94]:
index Area value
0 0 EUROPE 47
1 1 ASIA 51
2 2 AMERICAS 37
3 3 EUROPE 39
4 4 ASIA 22
5 5 AMERICAS 24
6 5 AMERICAS 50
In [99]:
df1 = df.groupby('Area')['value'].apply(list).reset_index()
df1
Out[99]:
Area value
0 AMERICAS [37, 24, 50]
1 ASIA [51, 22]
2 EUROPE [47, 39]
In [102]:
df1 = pd.concat([df1, df1['value'].apply(pd.Series).fillna(0)], axis=1)
df1
Out[102]:
Area value 0 1 2
0 AMERICAS [37, 24, 50] 37 24 50
1 ASIA [51, 22] 51 22 0
2 EUROPE [47, 39] 47 39 0