Python Pandas 加入索引值
Posted
技术标签:
【中文标题】Python Pandas 加入索引值【英文标题】:Python Pandas Join with Index value 【发布时间】:2019-05-04 20:46:03 【问题描述】:我想加入 2 个 DataFrame,例如: 数据帧1:
A 1
B 2
C 3
D 4
数据帧2:
A 1
A 3
B 4
B 3
B 7
C 4
D 6
D 8
结果应该是这样的:
A 1 1
3
B 2 4
3
7
C 3 4
D 4 6
8
我尝试加入合并和连接,但没有任何效果,请您帮帮我。
【问题讨论】:
【参考方案1】:一种方法是这样的:
df_out = pd.concat([df1,df2])
df_out.set_index([0,df_out.groupby([0]).cumcount()])[1].unstack()
输出:
0 1 2 3
0
A 1.0 1.0 3.0 NaN
B 2.0 4.0 3.0 7.0
C 3.0 4.0 NaN NaN
D 4.0 6.0 8.0 NaN
编辑更新以匹配预期输出:
df_out = pd.concat([df1,df2])
df_out = df_out.set_index([0,df_out.groupby([0]).cumcount()])[1]
df_out.sort_index()
输出:
A 0 1
1 1
2 3
B 0 2
1 4
2 3
3 7
C 0 3
1 4
D 0 4
1 6
2 8
Name: 1, dtype: int64
编辑更新一点...
df_out = pd.concat([df1,df2])
df_out = df_out.set_index([0,df_out.groupby([0]).cumcount()])[1]
df_out = df_out.sort_index().to_frame()
df_out = df_out.reset_index().drop('level_1', axis=1)
df_out[0] = df_out[0].mask(df_out[0].duplicated()).fillna('')
print(df_out)
输出:
0 1
0 A 1
1 1
2 3
3 B 2
4 4
5 3
6 7
7 C 3
8 4
9 D 4
10 6
11 8
【讨论】:
@Beginner2018 是吗? 您最好编辑您的问题。用四个空格引导您的预期输出的每一行。 在 pandas 中,每一行都必须有一个索引标签,因此我的输出中有 0,1,2 01,2,3... 等行。 Bosten 真的很感谢 :D 它现在可以与隔断线一起使用。也非常感谢代码【参考方案2】:你可以这样做:
import pandas as pd
data1 = [['A', 1],
['B', 2],
['C', 3],
['D', 4]]
data2 = [['A', 1],
['A', 3],
['B', 4],
['B', 3],
['B', 7],
['C', 4],
['D', 6],
['D', 8]]
df1 = pd.DataFrame(data=data1, columns=['c1', 'c2'])
df2 = pd.DataFrame(data=data2, columns=['c1', 'c2'])
result = pd.concat([df1, df2]).groupby('c1')['c2'].apply(list)
print(result)
输出
c1
A [1, 1, 3]
B [2, 4, 3, 7]
C [3, 4]
D [4, 6, 8]
Name: c2, dtype: object
或者没有列:
df1 = pd.DataFrame(data=data1)
df2 = pd.DataFrame(data=data2)
result = pd.concat([df1, df2]).groupby(0)[1].apply(list)
print(result)
输出
0
A [1, 1, 3]
B [2, 4, 3, 7]
C [3, 4]
D [4, 6, 8]
Name: 1, dtype: object
【讨论】:
@RavinderSingh .apply(list) 将函数列表应用于groupby的组。 @Beginner 你能说得更具体点吗?以上是关于Python Pandas 加入索引值的主要内容,如果未能解决你的问题,请参考以下文章
Python Pandas - 如何在具有不同级别数的索引上加入 DataFrames?
Python的pandas 数组如何得到索引值,如图,我要得到ohio 的索引值,应该怎样做?