结合两只大熊猫dataframes只需添加整数计数
我尝试添加不同长度的两只大熊猫dataframes在一起:结合两只大熊猫dataframes只需添加整数计数
fruit rating count
0 apple A 2
1 pear B 2
2 peach A 1
3 apple B 2
4 pear C 1
fruit rating count
0 apple A 0
1 apple B 0
2 apple C 0
3 pear A 0
4 pear B 0
5 pear C 0
6 peach A 0
7 peach B 0
8 peach C 0
基本上我想第一dataframes'计数整数添加到它下面的第二个类型和评级是相同的。例如,由于“pear和B”,dataframe1上的索引1应该在dataframe2的索引4上添加2两个计数。
我已经尝试过更新功能,但它似乎与索引混乱,只是取代了类型和评级。如果我不擅长解释,请道歉。我仍在学习。非常感谢你的帮助。
假设你dataframes是DF1分别DF2,
df3 = pd.merge(df2, df1, how = 'outer', on = ['fruit', 'rating'])
df3 = df3.drop('count_x', axis = 1).fillna(0)
df3.columns = ['fruit', 'rating', 'count']
会给你想要的数据帧
fruit rating count
0 apple A 2.0
1 apple B 2.0
2 apple C 0.0
3 pear A 0.0
4 pear B 2.0
5 pear C 1.0
6 peach A 1.0
7 peach B 0.0
8 peach C 0.0
您可以在相关的索引尝试groupby
:
这给你一个多重索引DataFrame
:
count
fruit rating
apple A 2.0
B 2.0
C 0.0
peach A 1.0
B 0.0
C 0.0
pear A 0.0
B 2.0
C 1.0
如果要删除索引只是重置索引:
result.reset_index()
Out[182]:
fruit rating count
0 apple A 2.0
1 apple B 2.0
2 apple C 0.0
3 peach A 1.0
4 peach B 0.0
5 peach C 0.0
6 pear A 0.0
7 pear B 2.0
8 pear C 1.0
没有必要groupby。水果和评级似乎已经是独一无二的了。使用设置索引 – piRSquared
谢谢。我仍然在学习自己。实际上,这帮助我实现了我认为'groupby'会为我做的事情。 –
非常感谢! –
这侧重于更新只需要添加行和维护integer
dtype
df1.append(df2).groupby(['fruit', 'rating']).sum().reset_index()
fruit rating count
0 apple A 2
1 apple B 2
2 apple C 0
3 peach A 1
4 peach B 0
5 peach C 0
6 pear A 0
7 pear B 2
8 pear C 1
我发现SQL最直观的用于这样的目的:
import pandasql
import pandas as pd
pysqldf = lambda q: pandasql.sqldf(q, globals())
Table1 = pd.DataFrame()
Table1['x'] = [x for x in range(10)]
Table2 = pd.DataFrame()
Table2['x'] = [x for x in range(10)]
print pysqldf('''
SELECT
*,
1 as ID
FROM Table1
UNION
SELECT *,2 as ID
FROM Table2
''')
非常感谢! –