繁体   English   中英

如何统计pandas中重复行的值

[英]How to count the values in duplicated rows in pandas

尽管这似乎是一个简单的问题,但我已经为此苦苦挣扎了一段时间。 我有两个数据框,我想确定某些列之间的重复项,然后我想将两个数据框的值与另一列相加。 我会尽力展示。 下表描述了两个数据帧的结构,我将调用 df1 和 df2。

制作 2019-12-01 2019-06-04
宝马 0 3个
大众 1个 3个
制作 2018-12-01 2019-06-04
特斯拉 0 2个
大众 2个 2个

这是我的尝试

df = pd.concat ([df1, df2], axis=1)
    df_2 = df [df.duplicated (subset=[ 'make'], keep=False)]
    df_2 = pd.DataFrame(df_2)
    valuePosition1 = df_2.columns.get_loc(2019-12-01)
    valuePosition2 = df_2.columns.get_loc(2018-12-01)
    flow = min(df_2.iloc[:, valuePosition1].sum(), df_2.iloc[:, valuePosition2].sum())
    print(flow)

答案应该是 1,因为 df1[2019-12-01] 和 df2[2018-12-01] 中都有一个 VW。 但我不断收到奇怪的错误:

The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()

这甚至似乎不明白我在做什么。 我真的束手无策。 这两个数据框也非常大,所以我需要一种快速的方法来做到这一点。

任何指导或帮助将不胜感激!

最好沿行轴 ( concat(..., axis=0) ) 连接,因为duplicated期望沿该轴工作:

返回 boolean 表示重复行的系列。

考虑到您知道自己感兴趣的列,您还可以使用loc (主要基于 label)而不是iloc (主要基于 integer position)。

import pandas as pd

df1 = pd.read_csv('sample1.csv', sep='\s+')
df2 = pd.read_csv('sample2.csv', sep='\s+')

df = pd.concat([df1,df2], axis=0)
print(df)

dfd = df[df.duplicated(subset=['make'], keep=False)]
print(dfd)

flow = min(dfd.loc[:, '2019-12-01'].sum(),
           dfd.loc[:, '2018-12-01'].sum())
print(flow)

Output 来自df

    make  2019-12-01  2019-06-04  2018-12-01
0    BMW         0.0           3         NaN
1     VW         1.0           3         NaN
0  TESLA         NaN           2         0.0
1     VW         NaN           2         2.0

Output 来自dfd

  make  2019-12-01  2019-06-04  2018-12-01
1   VW         1.0           3         NaN
1   VW         NaN           2         2.0

Output 来自流量

1.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM