python - 熊猫数据框的行到列的值
问题描述
我有一个具有不同数据类型的数据框,如下所示。
df:
A B C
0 True X 1
1 False X 2
2 False Y 3
3 True Y 4
4 False X 5
5 True X 6
6 True Y 7
7 False Y 8
我需要从 C 中获取值并将它们放在 B 中的 X 和 Y 的不同列中,在 A 中为真。所需的 df 看起来像这样:
df_desired:
X_1 X_2 Y_1 Y_2
0 1 6 4 7
我能够使用以下代码对 df 进行分组以获取 B 中 X 和 Y 的 A 中为真的值:
df1 = df.groupby(by=['A', 'B'])['C'].apply(list).reset_index()
df1:
B A C
0 X False [2, 5]
1 X True [1, 6]
2 Y False [3, 8]
3 Y True [4, 7]
在另一个数据框中分配 True 列给了我一个提示,即我走在正确的道路上,但似乎我陷入了获取所需数据框的最后一步。
df2['X'] = df1[df1['A']].iloc[0]['C']
df2['Y'] = df1[df1['A']].iloc[1]['C']
df2:
X Y
0 1 4
1 6 7
我试过df2。转置,但如果 df2 的形状不是正方形,它就不能特别工作。
最快的方法是什么?
解决方案
你可以做:
d = df.loc[df['A']]
c = d['B'] + '_' + d.groupby('B').cumcount().add(1).astype(str)
d = pd.DataFrame([d['C'].values], columns=c).sort_index(1)
或者,
d = df.loc[df['A'], ['B', 'C']].copy()
d['B'] += '_' + d.groupby('B').cumcount().add(1).astype(str)
d = d.set_index('B').T.reset_index(drop=True).sort_index(1)
print(d)
X_1 X_2 Y_1 Y_2
0 1 6 4 7
推荐阅读
- reactjs - 未调用 Redux 选择器
- debugging - 如何在版本 > 8 中远程调试附加 Keycloak
- r - 如果从脚本调用并在 R 中的服务器端调用,如何使变量成为全局变量?
- python - 乘以列值但排除 Pandas 中的零值
- java - 可以在 mvnrepository.com 上找到 maven 依赖项,但在 repo.maven.apache.org/maven2/ 上找不到
- css - 有没有办法 :first-of-type::first-letter 除非元素具有给定类型的父级?
- google-apps-script - 修改代码 - 将永久抄送添加到 MailMerge - Google 表格/Google Apps 脚本
- python - 如何使用 SpaCy 解决西班牙语词形还原问题?
- java - 代码在 Java 递归中返回堆栈溢出错误
- asp.net-mvc - IdentityServer4 客户端应用程序:ArgumentNullException:IDX10000:参数“hashAlgorithm”不能是“null”或空对象