在 pandas 中仅重塑两列
Reshape by only two columns in pandas
这应该是一个简单的问题,但我想我只是缺少我应该搜索的关键字。
假设我有一个两列长的数据集,如下所示:
test = pd.DataFrame(
{
'color': ['white', 'white', 'white',
'red', 'red', 'red',
'black', 'black', 'black'],
'value': [1,2,3,4,5,6,7,8,9]
})
我怎样才能把它变成下面的格式:
white red black
1 4 7
2 5 8
3 6 9
我意识到这应该是一个简单的枢轴函数,例如:
test.pivot('color', 'value')
,但这会产生与周围 NaN 成对角线的值。有没有办法解决?
尝试:
test["id"]=test.groupby("color")["color"].cumcount()
test.pivot(index="id", columns="color", values="value")
输出:
color black red white
id
0 7 4 1
1 8 5 2
2 9 6 3
我已经使用 pandas 库
使用分组功能完成了一些快速解决方案
for i in test.groupby('color'):
print(i[0])
for j in range(len(i[1])):
for k in i[1].values:
print(k[1])
break
输出:
black
7
8
9
red
4
5
6
white
1
2
3
您可以创建系列、重置索引并从 3 系列重新创建数据框:
df = pd.DataFrame({'color': ['white', 'white', 'white', 'red', 'red', 'red', 'black', 'black', 'black'],
'value': [1,2,3,4,5,6,7,8,9]})
serie_white = df['value'][df['color'] == "white"].reset_index(drop=True)
serie_red = df['value'][df['color'] == "red"].reset_index(drop=True)
serie_black = df['value'][df['color'] == "black"].reset_index(drop=True)
result = pd.DataFrame({'white': serie_white, 'red': serie_red, 'black': serie_black})
print(result)
输出:
white red black
0 1 4 7
1 2 5 8
2 3 6 9
这应该是一个简单的问题,但我想我只是缺少我应该搜索的关键字。
假设我有一个两列长的数据集,如下所示:
test = pd.DataFrame(
{
'color': ['white', 'white', 'white',
'red', 'red', 'red',
'black', 'black', 'black'],
'value': [1,2,3,4,5,6,7,8,9]
})
我怎样才能把它变成下面的格式:
white red black
1 4 7
2 5 8
3 6 9
我意识到这应该是一个简单的枢轴函数,例如:
test.pivot('color', 'value')
,但这会产生与周围 NaN 成对角线的值。有没有办法解决?
尝试:
test["id"]=test.groupby("color")["color"].cumcount()
test.pivot(index="id", columns="color", values="value")
输出:
color black red white
id
0 7 4 1
1 8 5 2
2 9 6 3
我已经使用 pandas 库
使用分组功能完成了一些快速解决方案 for i in test.groupby('color'):
print(i[0])
for j in range(len(i[1])):
for k in i[1].values:
print(k[1])
break
输出:
black
7
8
9
red
4
5
6
white
1
2
3
您可以创建系列、重置索引并从 3 系列重新创建数据框:
df = pd.DataFrame({'color': ['white', 'white', 'white', 'red', 'red', 'red', 'black', 'black', 'black'],
'value': [1,2,3,4,5,6,7,8,9]})
serie_white = df['value'][df['color'] == "white"].reset_index(drop=True)
serie_red = df['value'][df['color'] == "red"].reset_index(drop=True)
serie_black = df['value'][df['color'] == "black"].reset_index(drop=True)
result = pd.DataFrame({'white': serie_white, 'red': serie_red, 'black': serie_black})
print(result)
输出:
white red black
0 1 4 7
1 2 5 8
2 3 6 9