gpt4 book ai didi

python - pandas - 包括所有列和行对值

转载 作者:太空宇宙 更新时间:2023-11-03 15:48:21 25 4
gpt4 key购买 nike

我有一个缺少大量数据的数据集。示例数据文件:

a,b,c,w
a1,,,
a2,b1,c1,
a2,b1,c2,
a2,,,
a3,b2,c3,
a4,,,
a5,b1,c1,100
a6,b2,c4,
a7,b1,c2,214.285714285714
a7,b1,c2,245.454545454545
a7,b1,c2,292.105263157895
a7,b1,c2,
a8,b1,c2,
a9,b2,c3,
,b3,,
,,c4,
,,c5,

我正在努力创建一个如下所示的数据透视表:

         w
mean
a a1 a2 a3 a4 a5 a6 a7 a8 a9
b c
NaN NaN NaN NaN NaN NaN NaN NaN NaN
b1 c1 NaN NaN NaN NaN 100.0 NaN NaN NaN NaN
b1 c2 NaN NaN NaN NaN NaN NaN 250.615174 NaN NaN
b2 c3 NaN NaN NaN NaN NaN NaN NaN NaN NaN
b2 c4 NaN NaN NaN NaN NaN NaN NaN NaN NaN
b3 NaN NaN NaN NaN NaN NaN NaN NaN NaN
c4 NaN NaN NaN NaN NaN NaN NaN NaN NaN
c5 NaN NaN NaN NaN NaN NaN NaN NaN NaN

我不关心空白是在顶部还是底部。关键是每个 A 值都显示为一列,而对于行,仅显示现有的 B、C 对。

以下代码:

dataframe = pd.read_csv('test/data/sparse.csv')
pd.set_option('display.width', 1000)
print(dataframe)
col_names = ['a']
row_names = ['b', 'c']
value_names = ['w']
aggregates = {'w': ['mean']}

pivot = pd.pivot_table(
dataframe,
index=row_names,
columns=col_names,
values=value_names,
aggfunc=aggregates
)

创建一个像这样的数据透视表:

           w
mean
a a5 a7
b c
b1 c1 100.0 NaN
c2 NaN 250.615174
b2 c3 NaN NaN
c4 NaN NaN

如果我将所有 None 值设置为空白,通过:

for c in dataframe:
if str(dataframe[c].dtype) in ('object', 'string_', 'unicode_'):
dataframe[c].fillna(value='', inplace=True)

然后我得到

           w            
mean
a a5 a7
b c
NaN NaN
c4 NaN NaN
c5 NaN NaN
b1 c1 100.0 NaN
c2 NaN 250.615174
b2 c3 NaN NaN
c4 NaN NaN
b3 NaN NaN

这让我得到我的行而不是我的列。如果我将 dropna=False 添加到 pivot_table 调用,那么我会得到我所有的列,但我也会得到我的原始数据集中不存在的行对。

有什么建议吗?

谢谢

最佳答案

如果您可以使用 nan 而不是空格,那么 groupby + unstack 可以在这里工作。首先,使用 astype(str) 将列 abc 转换为字符串。这将导致 groupby 在分组数据时不再忽略 NaN。

cols = ['a', 'b', 'c']
df[cols] = df[cols].astype(str)

df.groupby(cols)\
.w.mean()\
.unstack(0)\
.drop('nan', 1)

a a1 a2 a3 a4 a5 a6 a7 a8 a9
b c
b1 c1 NaN NaN NaN NaN 100.0 NaN NaN NaN NaN
c2 NaN NaN NaN NaN NaN NaN 250.615174 NaN NaN
b2 c3 NaN NaN NaN NaN NaN NaN NaN NaN NaN
c4 NaN NaN NaN NaN NaN NaN NaN NaN NaN
b3 nan NaN NaN NaN NaN NaN NaN NaN NaN NaN
nan c4 NaN NaN NaN NaN NaN NaN NaN NaN NaN
c5 NaN NaN NaN NaN NaN NaN NaN NaN NaN
nan NaN NaN NaN NaN NaN NaN NaN NaN NaN

关于python - pandas - 包括所有列和行对值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48591862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com