【问题标题】:find number of 1 and 0 combinations in two columns在两列中查找 1 和 0 组合的数量
【发布时间】:2018-05-14 12:04:09
【问题描述】:

输入:

            X   Y
Hyderabad   1   1
Bangalore   0   1
Goa         1   1
Chennai     0   1
Hyderabad   0   1
Goa         0   0
Chennai     0   1
Goa         0   0
Hyderabad   1   0
Chennai     0   1
Chennai     1   1
Goa         0   1
Bangalore   0   0
Bangalore   0   1

预期输出:

        X   
        0   1
Y   0   3   1
    1   7   3

【问题讨论】:

  • 您这样做有什么问题?您的代码中有哪些具体不起作用? idownvotedbecau.se/noattempt
  • 太棒了。我们有输入和预期输出。我们只是错过了问题和您的尝试。
  • 输入是熊猫数据框还是什么?
  • 将 X、Y 列连接到一个元组中,并从集合中执行一个简单的 Counter()。

标签: python pandas counter


【解决方案1】:

假设您有一个 pandas 数据框,一个选项是使用 pandas.crosstab 返回另一个数据框:

import pandas as pd

df = pd.read_csv('file.csv')
res = pd.crosstab(df['X'], df['Y'])

print(res)

Y  0  1
X      
0  3  7
1  1  3

如果需要字典结果,也可以使用collections.Counter 解决方案:

res = Counter(zip(df['X'].values, df['Y'].values))

【讨论】:

  • @FHTMitchell,这是一个pd.DataFrame。你的可能更有效率(这就是为什么我 +1 :))。
  • @jpp 你确定吗?我希望 pd.crosstab 进行一些矢量化计算,而不是使用 pandas 时通常不赞成使用显式 for 循环
  • @DeepSpace, 好像pandas 有一个固定的开销,所以对于df2 = pd.concat([df]*100) 它更慢,但对于更大的数据帧它更快。因为,正如你所说,它是矢量化的。
  • @Anusha,对不起,我不确定你的意思。如果您有新问题,请ask another,但前提是您无法在 SO 的其他地方找到答案。请记住在您的问题中展示您的尝试。
【解决方案2】:

我的意思是,假设它是一个 pandas 数据框(称为df

from collections import Counter

counter = Counter()
for row in df.itertuples():
    counter[row.X, row.Y] += 1

输出:

 Counter({(0, 0): 3, (0, 1): 7, (1, 0): 1, (1, 1): 3})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多