[英]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.