修改python数据帧

修改python数据帧,python,pandas,Python,Pandas,使用python如何更改数据帧 输入 id1 AAA 12 id1 BBB 2 id2 DDD 3 id2 AAA 23 id3 FFF 34 id3 AAA 5 id3 BBB 65 输出 id1 id2 id3 AAA 12 23 0 BBB 2 0 65 DDD 0 3 0 FFF 0 0 34 我认为pivot_table功能正是您所需要的 row = [["id1", "AAA", 12],["id2", "BBB", 2],[

使用python如何更改数据帧

  • 输入

    id1 AAA 12
    id1 BBB 2
    id2 DDD 3
    id2 AAA 23
    id3 FFF 34
    id3 AAA 5
    id3 BBB 65
    
  • 输出

        id1 id2 id3
    AAA  12  23   0
    BBB   2   0  65
    DDD   0   3   0
    FFF   0   0  34
    

我认为pivot_table功能正是您所需要的

row = [["id1", "AAA", 12],["id2", "BBB", 2],["id3", "CCC", 1],["id1", "BBB", 4],["id2", "AAA", 1],["id3", "AAA", 3]]
df=pd.DataFrame(row, columns=["id", "letters", "numbers"])
df.pivot_table(values="numbers", index="letters",columns="id").reset_index()

它与excel中的透视表一样,在索引重复的情况下对值求和(但您可以将聚合函数设置为平均值)

我认为透视表函数就是您要寻找的

row = [["id1", "AAA", 12],["id2", "BBB", 2],["id3", "CCC", 1],["id1", "BBB", 4],["id2", "AAA", 1],["id3", "AAA", 3]]
df=pd.DataFrame(row, columns=["id", "letters", "numbers"])
df.pivot_table(values="numbers", index="letters",columns="id").reset_index()
它执行excel中透视表的操作,在索引重复的情况下对值求和(但您可以将聚合函数设置为平均值)

您可以使用unstack()和fillna()获得预期的输出

from pandas.compat import StringIO as pStringIO

new_data = pStringIO("""id Symbol Value
id1 AAA 12
id1 BBB 2
id2 DDD 3
id2 AAA 23
id3 FFF 34
id3 AAA 5
id3 BBB 65""")

df = pd.read_csv(new_data, sep="\s+", index_col=[0,1], skipinitialspace=True)
df_soln = (df.unstack(level=0)).fillna(0)
print(df_soln)
给你

       Value            
id       id1   id2   id3
Symbol                  
AAA     12.0  23.0   5.0
BBB      2.0   0.0  65.0
DDD      0.0   3.0   0.0
FFF      0.0   0.0  34.0
如果您不希望顶级显示值,只需执行以下操作

df_soln.columns = [c[-1] for c in df_soln.columns]
可以使用unstack()和fillna()获得预期的输出

from pandas.compat import StringIO as pStringIO

new_data = pStringIO("""id Symbol Value
id1 AAA 12
id1 BBB 2
id2 DDD 3
id2 AAA 23
id3 FFF 34
id3 AAA 5
id3 BBB 65""")

df = pd.read_csv(new_data, sep="\s+", index_col=[0,1], skipinitialspace=True)
df_soln = (df.unstack(level=0)).fillna(0)
print(df_soln)
给你

       Value            
id       id1   id2   id3
Symbol                  
AAA     12.0  23.0   5.0
BBB      2.0   0.0  65.0
DDD      0.0   3.0   0.0
FFF      0.0   0.0  34.0
如果您不希望顶级显示值,只需执行以下操作

df_soln.columns = [c[-1] for c in df_soln.columns]