Wol*_*Ves 5 python reformatting pandas
我正在努力弄清楚如何开发一个给定格式的方阵
a a 0
a b 3
a c 4
a d 12
b a 3
b b 0
b c 2
...
Run Code Online (Sandbox Code Playgroud)
对于这样的事情:
a b c d e
a 0 3 4 12 ...
b 3 0 2 7 ...
c 4 3 0 .. .
d 12 ...
e . ..
Run Code Online (Sandbox Code Playgroud)
在熊猫.我开发了一种方法,我认为它可以工作但需要永远运行,因为每次使用for循环时,它必须遍历从每个值开始的每个列和行.我觉得我肯定在这里重新发明轮子.鉴于有多少列和行,这对于我的数据集也是不现实的.在python中是否有类似于R的强制转换功能的东西可以更快地做到这一点?
unu*_*tbu 11
你可以使用df.pivot:
import pandas as pd
df = pd.DataFrame([['a', 'a', 0],
['a', 'b', 3],
['a', 'c', 4],
['a', 'd', 12],
['b', 'a', 3],
['b', 'b', 0],
['b', 'c', 2]], columns=['X','Y','Z'])
print(df.pivot(index='X', columns='Y', values='Z'))
Run Code Online (Sandbox Code Playgroud)
产量
Y a b c d
X
a 0.0 3.0 4.0 12.0
b 3.0 0.0 2.0 NaN
Run Code Online (Sandbox Code Playgroud)
这里,index='X'告诉df.pivot我们使用标记'X'为索引的列,并columns='Y'告诉它使用标记'Y'为列索引的列.
有关更多信息和其他重塑方法,请参阅文档pivot.
或者,您可以使用pd.crosstab:
print(pd.crosstab(index=df.iloc[:,0], columns=df.iloc[:,1],
values=df.iloc[:,2], aggfunc='sum'))
Run Code Online (Sandbox Code Playgroud)
与df.pivot预期每(a1, a2)对都是唯一的不同,pd.crosstab
(with agfunc='sum')将通过对相关值求和来聚合重复对.虽然在发布的示例中没有重复对,但是在values
使用参数时,需要指定应该如何聚合重复项.
另外,虽然df.pivot是传递列标签,但是pd.crosstab传递的是数组(例如整列df).df.iloc[:, i]是i第二列df.
| 归档时间: |
|
| 查看次数: |
4298 次 |
| 最近记录: |