熊猫函数以基于单列创建多个列

发布于 2025-02-11 04:01:14 字数 1230 浏览 2 评论 0原文

我有一个看起来像这样的数据集

ABC
A111.3
A121.4
A131.3
A211.6
A2A2 21.7
A231.5
A11 A11 A1 1
A122.7
A132.4
A211.6
A2 1 1.6 A221.7
A2 A231.2

所需的输出

A123
A11.31.41.3
A112.72.7
A21.71.6 1.61.5
A21.61.71.2

我尝试了一个枢轴表,但它给出了聚合,没有聚合枢轴,它显示出重复的索引错误,因为重复的索引。处理此问题的最佳方法是什么?

I have a dataset which looks like this

ABC
A111.3
A121.4
A131.3
A211.7
A221.6
A231.5
A111
A122.7
A132.4
A211.6
A221.7
A231.2

Desired output :

A123
A11.31.41.3
A112.72.4
A21.71.61.5
A21.61.71.2

I have tried a pivot table but it's giving aggregation and without aggregation pivot it is showing a duplicate index error because of the duplicate index. What is the best way to handle this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我的影子我的梦 2025-02-18 04:01:14

方式进行迭代:

dfx = df.pivot_table(index='A', columns='B', values='C', aggfunc=list)
pd.concat([dfx.applymap(lambda x:x[idx]) for idx in range(dfx.apply(lambda x: len(x)).max())])
A123
A11.31.3 1.41.3
A21.71.6 1.61.5
A112.72.7 2.4
A21.6 1.6 1.6 1.71.71.2

组合都具有相同数量的元素)与以下

您可以使用数量的元素数量(假设所有 简单的枢轴应该做:

df.pivot_table(index='A', columns='B', values='C', aggfunc='mean')

You can iterate over using number of elements (assuming all combos have same number of elements) as follows:

dfx = df.pivot_table(index='A', columns='B', values='C', aggfunc=list)
pd.concat([dfx.applymap(lambda x:x[idx]) for idx in range(dfx.apply(lambda x: len(x)).max())])
A123
A11.31.41.3
A21.71.61.5
A112.72.4
A21.61.71.2

Old answer:

Seeing your sample dataframe, a simple pivot should do:

df.pivot_table(index='A', columns='B', values='C', aggfunc='mean')
是伱的 2025-02-18 04:01:14

尝试:

df = df.pivot_table(index="A", columns="B", values="C", aggfunc=list)
df = df.explode(df.columns.to_list()).reset_index()
df.columns.name = None
print(df)

打印:

    A    1    2    3
0  A1  1.3  1.4  1.3
1  A1  1.0  2.7  2.4
2  A2  1.7  1.6  1.5
3  A2  1.6  1.7  1.2

Try:

df = df.pivot_table(index="A", columns="B", values="C", aggfunc=list)
df = df.explode(df.columns.to_list()).reset_index()
df.columns.name = None
print(df)

Prints:

    A    1    2    3
0  A1  1.3  1.4  1.3
1  A1  1.0  2.7  2.4
2  A2  1.7  1.6  1.5
3  A2  1.6  1.7  1.2
倾城月光淡如水﹏ 2025-02-18 04:01:14

一种选项是创建一个额外的列,在旋转之前,将其引入您的数据唯一性:

a = df.groupby('A').ngroup().diff().fillna(0, downcast = 'infer')
a = a.mask(a < 0, 1).cumsum()
(df
.assign(temp = a)
.pivot(['temp', 'A'], 'B', 'C')
.droplevel(0)
.rename_axis(columns = None)
)

      1    2    3
A
A1  1.3  1.4  1.3
A2  1.7  1.6  1.5
A1  1.0  2.7  2.4
A2  1.6  1.7  1.2

One option is to create an extra column that introduces uniqueness to your data, before pivoting:

a = df.groupby('A').ngroup().diff().fillna(0, downcast = 'infer')
a = a.mask(a < 0, 1).cumsum()
(df
.assign(temp = a)
.pivot(['temp', 'A'], 'B', 'C')
.droplevel(0)
.rename_axis(columns = None)
)

      1    2    3
A
A1  1.3  1.4  1.3
A2  1.7  1.6  1.5
A1  1.0  2.7  2.4
A2  1.6  1.7  1.2
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文