使用一个DataFrame作为pandas中另一个DataFrame的索引

时间:2016-11-10 15:19:07

标签: python pandas dataframe

仍然试图弄清楚如何在Python中使用多个DataFrame形成pandas的操作。

我有以下三个数据框(d1d2d3): enter image description here

对于user_id中的每位用户,我需要使用df2列中的值作为df3中'周'的索引,并将它们相乘df1中的相应值1}}。

例如:用户163,列measurements的值为0.0(来自df2)。第0.0周df3中的查找为2.此用户/列的最终值为2(从df1)乘以2 = 4.

我需要为user_id和所有列(活动,营养等)中的所有用户估算这个。

有什么想法吗?

我一直在玩.apply,但我觉得很难正确地解决问题。

1 个答案:

答案 0 :(得分:0)

我认为关键是将所有这些数据放在一起。您可以通过迭代和来回分别处理它,但使用Pandas merge功能更加容易和健壮,如下所示:

import pandas as pd

data1 = {'user_id':[163], 'measurements':[2.0]}
data2 = {'user_id':[163], 'measurements':[0.0]}
data3 = {'weeks':[0.0], 'measurements':[2.0]}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
df3 = pd.DataFrame(data3)

df = df1.merge(df2, on='user_id', how='outer', suffixes=['_df1', '_df2'])
df = df.merge(df3, left_on='measurements_df2', right_on='weeks',
              how='outer', suffixes=['', '_df3'])
df['new_val'] = df['measurements_df1'] * df['measurements']

In [13]: df
Out[13]:
   measurements_df1  user_id  measurements_df2  measurements  weeks  new_val
0               2.0      163               0.0           2.0    0.0      4.0

将来,如果你给我们一个可重复的例子来使用它会容易得多,特别是如果你可以在你尝试的内容中包含错误,但在这种情况下我知道你的意思很难弄清楚如何构建问题正确。我强烈建议book from the creator of Pandas,Wes McKinney。