Python 数据透视列表列

Python 数据透视列表列,python,pandas,list,dataframe,pivot-table,Python,Pandas,List,Dataframe,Pivot Table,我有一个pandas数据框,其中有一列的值是列表,另一列是日期。我想创建一个按日期统计列表元素的数据框架 数据帧看起来像: pd.DataFrame( data={ "col1": ["['a','b']", "['b','c']", "['a','c']", "", "['b']"], "col2": ["

我有一个pandas数据框,其中有一列的值是列表,另一列是日期。我想创建一个按日期统计列表元素的数据框架

数据帧看起来像:

pd.DataFrame(
    data={
        "col1": ["['a','b']", "['b','c']", "['a','c']", "", "['b']"],
        "col2": ["2020-01-01", "2020-01-02", "2020-01-03", "2020-01-04", "2020-01-05"],
    },
    index=[0, 1, 2, 3, 4],
)
我希望dataframe看起来像:

pd.DataFrame(
    data={"a": [1, 0, 1, 0, 0], "b": [1, 1, 0, 0, 1], "c": [0, 1, 1, 0, 0]},
    index=["2020-01-01", "2020-01-02", "2020-01-03", "2020-01-04", "2020-01-05"],
)
您对如何进行这种转换有何想法?

您可以使用extractall提取其中的值,然后使用groupby计算值:

输出:

0           a  b  c
col2               
2020-01-01  1  1  0
2020-01-02  0  1  1
2020-01-03  1  0  1
2020-01-04  0  0  0
2020-01-05  0  1  0
您可以使用extractall提取其中的值,然后使用groupby对值进行计数:

输出:

0           a  b  c
col2               
2020-01-01  1  1  0
2020-01-02  0  1  1
2020-01-03  1  0  1
2020-01-04  0  0  0
2020-01-05  0  1  0
你可以在这里用

你可以在这里用


您可以这样做:


df = pd.DataFrame(
    data={
        "col1": [['a','b'], ['b','c'], ['a','c'], ['c'], ['b']],
        "col2": ["2020-01-01", "2020-01-02", "2020-01-03", "2020-01-04", "2020-01-05"],
    }
)
df2 = df.explode('col1').reset_index(drop=True)
df2["value"]=1
pd.pivot_table(df2, values="value", index=["col2"], columns=["col1"], aggfunc=lambda x: 1, fill_value=0) 

您可以这样做:


df = pd.DataFrame(
    data={
        "col1": [['a','b'], ['b','c'], ['a','c'], ['c'], ['b']],
        "col2": ["2020-01-01", "2020-01-02", "2020-01-03", "2020-01-04", "2020-01-05"],
    }
)
df2 = df.explode('col1').reset_index(drop=True)
df2["value"]=1
pd.pivot_table(df2, values="value", index=["col2"], columns=["col1"], aggfunc=lambda x: 1, fill_value=0) 

这是一个强有力的回答,谢谢你光。然而,我应该更清楚一点——在我的数据集中,日期有时会重复,我想对所有出现的日期加总变量date@enixon4而不是out.index=df['col2']do out.groupbydf['col2'].sum:-这是一个强有力的答案,谢谢你,广。然而,我应该更清楚一点——在我的数据集中,日期有时会重复,我想对所有出现的日期加总变量date@enixon4而不是out.index=df['col2']do out.groupbydf['col2'].sum:-我认为如果您使用交叉表而不是数据透视表,这可能会更好,IMO pd.crosstabindex=df2.col2,columns=df2.col1。这也允许您放弃df2['value']=1Yes。我看到了答案。美好的我认为,如果使用交叉表而不是数据透视表(IMO pd.crosstabindex=df2.col2,columns=df2.col1),这可能会更好。这也允许您放弃df2['value']=1Yes。我看到了答案。美好的