这是一个由两部分组成的问题:
1)我有两个交叉表,我想在一个df中。我需要更改列名称。我觉得这很容易。文档使它看起来很容易。框架的顶部看起来像这样:
Category 0.0 1.0
Name
Bob 1 0
我希望它看起来像这样:
Category Loss Win
Name
Bob 1 0
当我尝试使用colnames =并出现错误时,我询问了它的列名是什么以及得到了什么。 。 。
Float64Index([0.0, 1.0], dtype='float64', name='Category')
我试着纠正这个问题。 。
colnames=['Loss', 'Win', 'Category']
但是我得到了AssertionError: arrays and names must have the same length
,在这种情况下对我来说没什么意义,因为我之前没有任何问题就改变了df的列名。
2)我梦想将上述内容加入到另一个交叉表中。我认为内部联接可能有效。如果名称出现在两个交叉表中,我希望它们在我的合并表中,如果没有,那么就忘了它们。但是,由于左表中的某些名称(让我们调用左表上方的表)没有出现在右表中(我在类别列上加入,这只是一个名称列表),内部联系是不行的。我的最终目标是使用看起来像的交叉频率表进行卡方检验。 。
Category1 Win Loss
Category2
Win2 5 20
Loss2 10 5
任何关于解决一个或两个问题的想法,并让我达到梦想的方方面面,我们将不胜感激。
编辑:合并数据帧的示例,我希望得到交叉频率/卡方。
DF1:
Category Loss Win
Name
Bob 1 0
Alice 5 1
Anne 1 0
Betty 8 2
Joan 4 1
DF2:
Category2 Loss2 Win2
Name
Alice 1 1
Anne 0 1
Betty 1 3
Joan 1 1
Combined Table:
Category Loss Win Loss2 Win2
Name
Alice 5 1 1 1
Anne 1 0 0 1
Betty 8 2 1 3
Joan 4 1 1 1
仅将DF1和DF2加入到两者中出现的名称,使得最终表格具有类别(即名称)列,损失&从DF1中获取列,从DF2中获取Loss2和Win2列。我假设这将允许我构建我需要的卡方(见上文)。
答案 0 :(得分:4)
回答1
dict
df.rename(columns={1: 'Win', 0: 'Loss'})
Category Loss Win
Name
Bob 1 0
lambda
df.rename(columns=lambda x: 'Win' if x else 'Loss')
Category Loss Win
Name
Bob 1 0
回答2
我不太清楚你想要什么
考虑以下数据框d1
和d2
np.random.seed([3,1415])
d1 = pd.DataFrame(
np.random.randint(10, size=(10, 2)),
pd.Index(list('ABCDEFGHIJ'), name='Name'),
pd.Index(['Loss', 'Win'], name='Category1')
)
d2 = pd.DataFrame(
np.random.randint(10, size=(10, 2)),
pd.Index(list('ABCDEFGHIJ'), name='Name'),
pd.Index(['Loss', 'Win'], name='Category2')
)
您可以使用pd.concat
df = pd.concat({d.columns.name: d for d in [d1, d2]}, axis=1)
df
Category1 Category2
Category1 Loss Win Loss Win
Name
A 0 2 3 6
B 7 3 7 7
C 8 7 4 5
D 0 6 3 7
E 8 6 5 9
F 0 2 8 7
G 0 4 6 4
H 9 7 7 6
I 3 2 2 6
J 4 3 6 5