我有一个包含以下列的pandas DataFrame(具有现有的数字索引):
points | variety
----------------
1 97 | Chardonnay
17 67 | Cabernet Sauvignon
12 70 | Cabernet Sauvignon
8 97 | Chardonnay
我想通过以下方式将其转换为新的DataFrame:
points
列作为新索引variety
列中每个唯一条目的一列points
值每个品种出现的频率。例如来自上面的示例:
Chardonnay | Cabernet Sauvignon
-------------------------------
97 2 | 0
67 0 | 1
70 0 | 1
请注意,原始索引与输出无关。这是显示更完整示例的图片:Pandas DataFrame Snapshot。
答案 0 :(得分:1)
您可以为此使用Pandas.crosstab
:
{
extend: 'excelHtml5',
autoFilter: true,
sheetName: 'Exported data'
}
[出]
pd.crosstab(index=df.points, columns=df.variety)
答案 1 :(得分:0)
假设您的数据存储在带有“点”和“种类”列的数据框中
df = pd.DataFrame({"points": [97, 67, 70, 97],
"variety": ["Chardonnay", "Cabernet Sauvignon",
"Cabernet Sauvignon", "Chardonnay"]})
那你想要的就是
result = df.groupby(["points", "variety"]).size().unstack().fillna(0)
打印result
给出
variety Cabernet Sauvignon Chardonnay
points
67 1.0 0.0
70 1.0 0.0
97 0.0 2.0
我假设列的顺序无关紧要。如果是这样,只需使用result = result.loc[:, new_col_order]
重新排序即可,其中
new_col_order = ["Chardonnay", ..., ]
是品种正确顺序的列表。