python - PANDAS reshape 数据领域日

标签 python pandas

示例数据集:

data = {"id":{"0":"1234","1":"1234","2":"4567","3":"4567","4":"4567","5":"89123","6":"89123","7":"89123","8":"18749"},"name":{"0":"bob","1":"rob","2":"bob","3":"rob","4":"sam","5":"bob","6":"rob","7":"sam","8":"dick"}}
df = pd.DataFrame(data=data)

解决方案应该将 id 列中的每个唯一值作为一列,然后将 name 列中的每个关联值作为该行的值。

我知道我可以通过多种方式做到这一点,我问这个的目的是希望看到所有可能的不同方式的例子。

例如,我看到了这个:

df.groupby('id')['name'].apply(list)

我发现这是一个非常棒的解决方案,但我不确定发生了什么。我假设它正在应用一个函数,将与每个 id 值关联的所有值转换为一个列表。我还想知道如何使用堆栈、取消堆栈、转置和枢轴来解决这个问题。

最佳答案

重建

pd.Series(df.name.values, [df.index, df.id.values]).unstack()

   1234 18749  4567 89123
0   bob  None  None  None
1   rob  None  None  None
2  None  None   bob  None
3  None  None   rob  None
4  None  None   sam  None
5  None  None  None   bob
6  None  None  None   rob
7  None  None  None   sam
8  None  dick  None  None

set_index

df.set_index('id', append=True).name.unstack()

   1234 18749  4567 89123
0   bob  None  None  None
1   rob  None  None  None
2  None  None   bob  None
3  None  None   rob  None
4  None  None   sam  None
5  None  None  None   bob
6  None  None  None   rob
7  None  None  None   sam
8  None  dick  None  None

fill_value=''

df.set_index('id', append=True).name.unstack(fill_value='')

id 1234 18749 4567 89123
0   bob                 
1   rob                 
2              bob      
3              rob      
4              sam      
5                    bob
6                    rob
7                    sam
8        dick           

关于python - PANDAS reshape 数据领域日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44189446/

相关文章:

python - 如何将 JSON 数据中的值插入表中

python - 将字符串百分比转换为 float 的干净方法是什么?

python - 如何根据 Pandas 的日期时间列找到每个 id 的第一次出现?

python - 将 html 表转换为 pandas 数据框

python - python中不同形状数组的逐元素乘法

python - 如何在 failfast 模式下使用 Python unittest 模块中的 TextTestRunner 类?

python - 如何在没有 QWidget 的情况下使用 TabWidget 启动项目

python - 向量化 pandas.DataFrame 的整合

python pandas 交叉表数据透视表(按同一类别)

python - 获取数据帧的非空值作为单列